【问题标题】:Appengine retrieve data related to user form submissionAppengine 检索与用户表单提交相关的数据
【发布时间】:2010-09-08 11:43:00
【问题描述】:

我已阅读 Appengine 的文档以了解如何从模型中检索数据。 但我错过了一些东西..

我的模型是用户和学生,其中学生是用户的参考属性。

用户登录,用一些值填写表单并使用 put() 保存数据。 如果您使用 test@example.com 登录,您将获得您的数据,或者如果您使用另一封电子邮件登录,您将获得与您发送到 db 的信息相对应的数据。

到这里为止一切都很好。 我正在尝试获取 PDF 并希望从登录的用户那里获取数据。

例子:

class SavePDF(webapp.RequestHandler):
    def post(self):
        user = users.get_current_user()
        if user:
            student= models.Student.all().get()

        p = canvas.Canvas(self.response.out)

        p.drawImage('ipca.jpg', 40, 700)

        p.drawString(50,640, 'Student Info:'  + '%s'  % student.name)   
        p.drawString(50,620, 'Adress:'                 + '%s'  % student.adress)


        p.drawString(50,300, 'PDF updated:%s'  %          str(datetime.date.today()))

        p.showPage()
        self.response.headers['Content-Type'] = 'application/pdf'
        self.response.headers['Content-Disposition'] = 'filename=mypdf.pdf'
        p.save()

我在这里得到的是一个不是当前用户的用户。显示有关其他用户的信息。 我尝试了不同的东西,但它会引发错误。 如果我尝试迭代会出错。

我错过了什么。

【问题讨论】:

    标签: python google-app-engine bigtable reportlab


    【解决方案1】:

    如果您的学生模型如下所示:

    class Student(db.Model):
        user = db.UserProperty()
        name = db.StringProperty()
        address = db.StringProperty()
    

    那么你可能想要这样的东西:

    user = users.get_current_user() 
    if user: 
        student = models.Student.all().filter('user =', user).get() 
    

    【讨论】:

    • 您好,收到此错误:Traceback(最近一次调用最后一次):文件“C:\Program Files\Google\google_appengine\google\appengine\ext\webapp_init_. py”,第 513 行,在 call handler.post(*groups) 文件“C:\Users\Celia\workspace\myApp\src\main.py”,第 337 行,在 post p.drawString (50,640, 'Student Info:' + '%s' % student.name) AttributeError: 'NoneType' object has no attribute 'name'
    • 对不起,用户是在User(db.Model)类中定义的:
    • @Martin:这是因为 student 是 None。从您的代码中,如果没有登录的 google 用户(即 users.get_current_user())返回 None,则可能会发生这种情况,或者如果没有指定用户的学生(即查询返回 None),则可能会发生这种情况。您的 PDF 代码假定存在有效学生 - 当没有有效学生时您可能需要返回其他内容?
    • 嗨撒克逊人,感谢您的快速回复。对我来说奇怪的是,如果我让 student=models.Student.all().get() 不会出错。它从不是当前用户的用户返回数据。我在本地进行测试,但也在ipca-fest.appspot.com 进行了测试。也许我必须调整我的模型,但不知道如何解决这个问题。
    • class User(db.Model): user=db.UserProperty('user', required=False) foto = db.BlobProperty('foto') class Student(db.Model): photo= db.BlobProperty('photo') name= db.StringProperty() unidade = db.StringProperty(choices = CHOICES_UNIDADE) 类别 = db.StringProperty(choices = CHOICES_CATEGORIA) 制度 = db.StringProperty(choices = CHOICES_REGIME) ano = db.IntegerProperty () modificado = db.DateTimeProperty(auto_now = True) user=db.ReferenceProperty(User, verbose_name=u'utilizador', required=False, collection_name='utilizadores')
    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2021-05-16
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多