Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GAE和Python:我的字典值返回None而不是object_Python_Google App Engine - Fatal编程技术网

GAE和Python:我的字典值返回None而不是object

GAE和Python:我的字典值返回None而不是object,python,google-app-engine,Python,Google App Engine,我正在使用Python和GAE,我正在尝试创建一个字典,其中键是用户ID,值是“学生”对象。然而,我的字典的值是None,而不是student对象 {'60': , '59': } 如果有人能给我指出正确的方向,我将不胜感激 Student.py class Student: def __init__(self, name, s_id, rew = {}): self.name = name.strip() self.rewards = {"Creativity": 0, "

我正在使用Python和GAE,我正在尝试创建一个字典,其中键是用户ID,值是“学生”对象。然而,我的字典的值是None,而不是student对象

{'60': , '59': }
如果有人能给我指出正确的方向,我将不胜感激

Student.py

class Student:

def __init__(self, name, s_id, rew = {}):
    self.name = name.strip()
    self.rewards = {"Creativity": 0, "Helping Others":0, "Participation":0, "Insight":0}
    self.totalRewardPoints = 0   
    self.s_id = s_id
Main.py(我只包含了相关代码)


首先,学生类需要从实现appengine数据存储持久性的某个模型类继承。如果您使用的是原始数据存储api,则为db.Model,如果为ndb,则为nbd.Model

其次,您还没有展示如何将(put())学生实体写入数据存储。基于您不是从(db或ndb)继承的事实,您不太可能将任何内容保存到数据存储中

当然,除非您没有包含实际代码。如果您使用db.Model作为基类,那么您的奖励字段将不起作用。您可能应该将ndb作为另一个起点,并使用结构化属性

您可能需要阅读appengine在视图文档上存储数据,您编写的代码与GAE(Google appengine代码)完全不同

你的学生班级应该看起来像(如果你想让奖励字段有某种结构)


否则,如果您使用db.Model,则奖励将是db.BlobProperty(),然后pickle将使用json在保存数据时使用pickle.dumps或json.dumps对奖励字典进行编码。

请重新格式化您的代码,缩进是完全错误的。除了Tim已经确定的问题,您的代码中有几个主要的Python问题。永远不要像在
\uuuu init\uuuu
中那样使用字典文本作为默认函数参数-每个调用都将获得相同的字典,如果修改它,所有后续调用当然将获得修改后的版本。同样,您在
主页
类中对
学生
的定义是一个类级变量,而不是一个实例变量-请在
get()
中定义它。此外,如果
Student
应该是一个模型类,您绝对不应该重写
\uuuuu init\uuu
。这很难做到正确-使用工厂方法代替。我刚刚发现了我的错误-我忘记了通过为…在。。。返回键而不是值。我认为我的错误是由于我设置类的方式造成的,但这是一个更基本的错误。这是一个错误,但看看我写的,您提供的代码永远无法与appengine数据存储和db.GqlQuery等一起使用。。。
class PageHandler(webapp2.RequestHandler):
def write(self, *a, **kw):
    self.response.out.write(*a, **kw)

def initialize(self, *a, **kw):
    webapp2.RequestHandler.initialize(self, *a, **kw)

def create_students(self):
    user = db.GqlQuery("SELECT * FROM User WHERE position='student'")

    for u in user:

        temp_id = str(u.key().id())
        self.students[temp_id] = student.Student(u.name, temp_id)

class MainPage(PageHandler):

students = {}

def get(self):

    user = db.GqlQuery("SELECT * FROM User WHERE position='student'")

    for u in user:

        temp_id = str(u.key().id())
        self.students[temp_id] = student.Student(u.name, temp_id)

    self.write(self.students)

app = webapp2.WSGIApplication([('/', MainPage)], debug=True)
class Reward(ndb.Model):
    reward = ndb.StringProperty()
    value = ndb.IntegerProperty()

class Student(ndb.Model):
    name = ndb.StringProperty(required=True)
    rewards = ndb.StructuredProperty(Reward, repeated=True)
    total_reward_points = ndb.IntegerProperty()
    s_id = ndb.StringProperty()