Python 从另一页引用实体

Python 从另一页引用实体,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我正在使用GoogleAppEngine创建一个带有表单的页面,以创建一个名为“tutorial”的实体。然后,当点击next时,用户有另一个表单,以便为先前创建的教程创建章节。我的问题是将“教程”的引用带到“章节” 新教程页面的处理程序: class NewTut(FuHandler): def get(self): self.render('newTut.html') def post(self): title = self.request.g

我正在使用GoogleAppEngine创建一个带有表单的页面,以创建一个名为“tutorial”的实体。然后,当点击next时,用户有另一个表单,以便为先前创建的教程创建章节。我的问题是将“教程”的引用带到“章节”

新教程页面的处理程序:

class NewTut(FuHandler):
    def get(self):
        self.render('newTut.html')
    def post(self):
        title = self.request.get("title")
        tags = self.request.get("tags")
        tut = Tutorial(title=title, tags=tags)
        tut.put()

        self.redirect('/newchap' #should i put here 'tut'?#)
这一部分工作得很好,但是在创建章节时,我如何使用这个
tut

新章节页面的处理程序:

class NewChap(FuHandler):
    def get(self):
        self.render('newChapter.html')

    def post(self):
        tutorial = Tutorial(??????)
        title = self.request.get("chapTitle")
        content = self.request.get("content")
        note = self.request.get("note")

要使此引用正常工作,我需要在此处执行什么操作?

您应该重定向到
'/newchap/%s'%tut.key.id()
,然后在请求中取出id。

您想通过URL将教程id传递到下一页。您可以将其作为get参数执行,也可以只是路径的一部分。以下是如何作为get参数执行此操作:

self.redirect('/newchap?tutorial_id=%s' % tut.key)
然后,在NewChap处理程序中:

tutorial_id = request.get("tutorial_id")
tutorial = db.Key.from_path('Tutorial', tutID)

@dlorenc answer的一部分是有效的,因为在NewChap上它不起作用。我就是这样让它工作的:

在NewTut hadler中:

self.redirect('/newchap?tutorial_id=%s' % tut.key)
在NewChap处理程序中,在帖子上:

tutID = self.request.get("tutorial_id")
tutorial = db.Key.from_path('Tutorial', tutID)

我在引用self.redirect('/newchap/%s'%tut.key.id())AttributeError时出错:“function”对象几乎没有属性“id”。。。我收到以下错误:
BadArgumentError:应为(,)的实例或iterable;已接收(unicode)。
还。。。在URL上传递密钥是安全的??它与任何其他方法一样安全。话虽如此,您需要添加一个授权系统来验证用户是否有权访问他们试图访问的教程。