gpt4 book ai didi

google-app-engine - 如何构建电影数据库和用户选择?

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:11 25 4
gpt4 key购买 nike

我想创建电影数据库,用户可以在其中标记他/她看过和喜欢的电影:

class Movies(ndb.Model):
watched = ndb.UserProperty()
liked = ndb.UserProperty()

那行得通吗?我使用谷歌账户。以后用户喜欢的所有电影应该怎么选?


更新。我关注了systempuntoout approach并使用以下代码保存用户选择:

user = users.get_current_user()
if user:
userschoices = models.UsersChoices(
movie=ndb.Key(models.Movies, movie_id), # TODO: what if movie_id is wrong?
watched=True,
user_id=user.user_id()
)
try:
userschoices.put()
self.response.out.write('1')
except:
self.response.out.write('0')

但是如果用户多次做出选择,那么就会有几条记录被添加到数据存储中......将用户 ID 和电影 ID 保存为键名不是更好吗?

userschoices = models.UsersChoices.get_by_id(user.user_id() + '-' + movie_id)
if userschoices is None:
userschoices = models.UsersChoices(id=user.user_id() + '-' + movie_id)
userschoices.movie = ndb.Key(models.Movies, movie_id) # TODO: what if movie_id is wrong?
userschoices.user_id = user.user_id()
if option == 'liked':
userschoices.liked = True
elif option == 'watched':
userschoices.watched = True

但是,使用这种方法,如果我不传递 liked,那么它会用 None 覆盖它的值(与 watched 相同,如果未通过,则使用 None

最佳答案

我会选择两种不同的模型,一种存储所有 Movies 详细信息,另一种存储 UserChoices :

class Movies(ndb.Model):
title = ndb.StringProperty(required=True)
director = ndb.StringProperty()
whatever = ndb.StringProperty()

class UsersChoices(ndb.Model):
movie = ndb.KeyProperty(kind=Movies, required=True)
watched = ndb.BooleanProperty(required=True)
liked = ndb.BooleanProperty(required=True)
user_id = ndb.StringProperty(required=True)

@classmethod
def get_liked_movies(cls, user_id):
return cls.query(cls.user_id == user_id, cls.liked == true).fetch(10)

@classmethod
def get_watched_movies(cls, user_id):
return cls.query(cls.user_id == user_id, cls.watched == true).fetch(10)

@classmethod
def get_by(cls, user_id, movie_key):
return cls.query(cls.user_id == user_id, cls.movie == movie_key).get()

如果您需要存储有关用户的信息,您应该创建您的UserInfo 模型,由users API 中的user_id 键控,包含您的应用程序需要的所有详细属性。

class UserInfo(ndb.Model):
#Keyed by user_id
nickname = ndb.StringProperty()
email = ndb.StringProperty()

要创建一个新的 UserInfo,您可以这样做:

from google.appengine.api import users

user = users.get_current_user()
userinfo = UserInfo(
id = user.user_id(),
nickname = user.keyname(),
email = user.email()
)
userinfo.put()

然后,当用户登录时,使用他/她的 user_id 检索观看/喜欢的电影。

from google.appengine.api import users

user = users.get_current_user()
userinfo = ndb.Key(UserInfo, user.user_id()).get()
watched_movies = UsersChoices.get_watched_movies(userinfo.key.id())
liked_movies = UsersChoices.get_liked_movies(userinfo.key.id())

关于google-app-engine - 如何构建电影数据库和用户选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com