gpt4 book ai didi

python - 如何使用 Google App Engine ndb.KeyProperty

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

我正在尝试开发一个应用程序,其中 Student 实体通过它们的键添加到 Class 实体。所以在类里面,我可以有一个 List 的学生,可以通过他们的键来识别,这些键可以是 Integer 或 String。但我不知道该怎么做。(请耐心等待,这是我的第一个项目使用 Python)这是我的代码:

import webapp2
from webapp2_extras import json
from google.appengine.ext import ndb

registrationPage = """
<html>
<head><title>Student Registration</title><head>
<body>
<h1>Student Registration</h1>
<form action="/" method="post">
<table border="1">
<tr><td>Srudent's BannerId</td><td><input type="number" size="6" name="banner_id"/></
td></tr>
<tr><td>Student's Name</td><td><input type="text" size="50" name="name"/></td></tr>
<tr><td><input type="submit" name="submit" value="Register Student"/></td></tr>
</table>
</form>
</body>
</html>
"""
class MathClass (ndb.Model):
class_Id = ndb.IntegerProperty(required=True)
professor_name = ndb.StringProperty(required=True)
number_of_students = ndb.IntegerProperty()
students = ndb.KeyProperty(repeated=True)



# A Class can return its data in JSON format
def toJSON(self):
jsonData = {
"class_id": self.key.id(),
"teacher": self.teacher,
"number_of_students": str(self.number_of_students),
}
return json.encode(jsonData)



class Student(ndb.Model):
banner_id = ndb.IntegerProperty(required=True)
name=ndb.StringProperty()

# A Student can return its data in JSON format
def toJSON(self):
jsonData = {
"banner_id": self.key.id(),
"name": self.name,
}
return json.encode(jsonData)

def toTableRow(self, points):
return "<tr><td>" + self.key.id() + "</td><td>" + self.name + "</td></tr>"

class StudentHandler(webapp2.RequestHandler):
def post(self):
banner_id = self.request.get('banner_id')
callback = self.request.get('callback')
student = Student.get_by_id(banner_id)
if student: # This student name already exists.
self.error(409) # This is the HTTP status code for 'unable to process due to conflict'
else:
id = int(self.request.get('banner_id'))
i = int(self.request.get('banner_id'))
n = self.request.get('name')
student = Student(id=banner_id, banner_id = id, name=n)
student.put()
if callback:
self.response.write(callback + '(' + student.toJSON + ')')
else:
self.response.write(student.toJSON())


class RegistrationHandler(webapp2.RequestHandler):

def get(self):
self.response.write(registerationPage)

app = webapp2.WSGIApplication([
('/', StudentHandler),
('/reg', RegistrationHandler)
], debug=True)

使用 HTML 表单,我已经能够在我的本地数据存储中保存一个 Student 实体。这就是我被卡住的地方,我如何与我新创建的学生一起创建一个类实体作为那个类(class)的一员?

最佳答案

只需获取或创建类实例,然后将学生键附加到学生属性

  subject = MathClass.get_or_insert(key_name="math_101")
subject.students.append(some_student.key)
subject.put()

您真的应该检查学生是否已经在该属性(property)中。例如如果不是subject.students中的student.key

大量错误检查等...需要放在此处。我将使该代码成为类的方法,即 MathClass.enroll,这样您就可以调用 subject.enroll(student)

关于python - 如何使用 Google App Engine ndb.KeyProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23151385/

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