Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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
Python 无法从加载到app engine数据存储的实体进行查询_Python_Google App Engine - Fatal编程技术网

Python 无法从加载到app engine数据存储的实体进行查询

Python 无法从加载到app engine数据存储的实体进行查询,python,google-app-engine,Python,Google App Engine,我是python的新手。我无法从实体查询-UserDetails和我加载到app engine数据存储的电话簿。我根据Brett的youtube视频“在GAE上开发和部署应用程序”——shoutout应用程序,编写了下面的UI。我只是试着做一些反向工程来从数据存储中查询,但每一步都失败了 #!/usr/bin/env python import wsgiref.handlers from google.appengine.ext import db from google.appengine.

我是python的新手。我无法从实体查询-UserDetails和我加载到app engine数据存储的电话簿。我根据Brett的youtube视频“在GAE上开发和部署应用程序”——shoutout应用程序,编写了下面的UI。我只是试着做一些反向工程来从数据存储中查询,但每一步都失败了

#!/usr/bin/env python

import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
import models

class showPhoneBook(db.Model):
    """ property to store user_name from UI to persist for the session """ 
    user_name = db.StringProperty(required=True)

class MyHandler(webapp.RequestHandler):
    def get(self):
        ## Query to get the user_id using user_name retrieved from UI ##
        p = UserDetails.all().filter('user_name = ', user_name)
        result1 = p.get()
        for itr1 in result1:
            userId = itr.user_id
        ## Query to get the phone book contacts using user_id retrieved ##
        q = PhoneBook.all().filter('user_id = ', userId)
        values = {
            'phoneBookValues': q
        }
        self.request.out.write(
            template.render('phonebook.html', values))
    def post(self):
        phoneBookuser = showPhoneBook(
            user_name = self.request.get('username'))
        phoneBookuser.put()
        self.redirect('/')

def main():
    app = webapp.WSGIApplication([
        (r'.*',MyHandler)], debug=True)
    wsgiref.handlers.CGIHandler().run(app)

if __name__ == "__main__":
    main()
这是我的models.py文件,我在其中定义了UserDetails和PhoneBook类

#!/usr/bin/env python

from google.appengine.ext import db

#Table structure of User Details table
class UserDetails(db.Model):
  user_id = db.IntegerProperty(required = True)
  user_name = db.StringProperty(required = True)
  mobile_number = db.PhoneNumberProperty(required = True)

#Table structure of Phone Book table
class PhoneBook(db.Model):
  contact_id = db.IntegerProperty(required=True)
  user_id = db.IntegerProperty(required=True)
  contact_name = db.StringProperty(required=True)
  contact_number = db.PhoneNumberProperty(required=True)
以下是我面临的问题,
1) 我无法在get(self)方法中调用
user\u name
(从用户界面--
phoneBookuser=showPhoneBook(user\u name=self.request.get('username'))
)来查询用户详细信息以获取相应的
user\u name
2) 从models.py文件导入时,代码无法识别UserDetails和电话簿类。
3) 我试图在main.py文件中定义UserDetails和PhoneBook类,但在
result1=p.get()
处出现错误,表示
BadValueError:property的类型不受支持:


从两周以来,我一直在努力克服我所陷入的困境,但徒劳无功。请帮助我理顺我的代码('因为我觉得我写的代码一直都是容易出错的代码)。

我建议您阅读GAE found的Python文档

一些评论:

  • 要使用在
    models.py
    中找到的模型,您需要使用前缀
    models.
    (例如
    models.UserDetails
    )或使用

    从模型导入*

  • MyHandler.get()
    中,不查找
    username
    get参数

  • 要获取与查询对应的值,请执行
    p.fetch(1)
    not
    p.get()

  • 你也应该阅读。我建议您将模型设置为:

    class UserDetails(db.Model):
        user_name = db.StringProperty(required = True)
        mobile_number = db.PhoneNumberProperty(required = True)
    
    #Table structure of Phone Book table
    class PhoneBook(db.Model):
         user = db.ReferenceProperty(UserDetails)
         contact_name = db.StringProperty(required=True)
         contact_number = db.PhoneNumberProperty(required=True)
    
    然后您的
    MyHandler.get()
    代码将如下所示:

    def get(self):
        ## Query to get the user_id using user_name retrieved from UI ##
        user_name = self.request.get('username')
        p = UserDetails.all().filter('user_name = ', user_name)
        user = p.fetch(1)[0]
        values = {
            'phoneBookValues': user.phonebook_set
        }
        self.response.out.write(template.render('phonebook.html', values))
    
    (不用说,您需要处理在数据库中找不到用户名的情况)

  • 我不太明白showPhoneBook
  • model的意义


    我建议您阅读GAE-found的Python文档

    一些评论:

  • 要使用在
    models.py
    中找到的模型,您需要使用前缀
    models.
    (例如
    models.UserDetails
    )或使用

    从模型导入*

  • MyHandler.get()
    中,不查找
    username
    get参数

  • 要获取与查询对应的值,请执行
    p.fetch(1)
    not
    p.get()

  • 你也应该阅读。我建议您将模型设置为:

    class UserDetails(db.Model):
        user_name = db.StringProperty(required = True)
        mobile_number = db.PhoneNumberProperty(required = True)
    
    #Table structure of Phone Book table
    class PhoneBook(db.Model):
         user = db.ReferenceProperty(UserDetails)
         contact_name = db.StringProperty(required=True)
         contact_number = db.PhoneNumberProperty(required=True)
    
    然后您的
    MyHandler.get()
    代码将如下所示:

    def get(self):
        ## Query to get the user_id using user_name retrieved from UI ##
        user_name = self.request.get('username')
        p = UserDetails.all().filter('user_name = ', user_name)
        user = p.fetch(1)[0]
        values = {
            'phoneBookValues': user.phonebook_set
        }
        self.response.out.write(template.render('phonebook.html', values))
    
    (不用说,您需要处理在数据库中找不到用户名的情况)

  • 我不太明白showPhoneBookmodel的意义

  • 存储到数据存储的“会话变量”不会遵循重定向;您必须从get()处理程序中的数据存储中获取它,尽管没有在cookie或其他东西中设置会话ID,这根本不会实现会话,而是允许任何获取/使用POST请求中发送的任何值,无论它是由他们还是其他人发送的。为什么要使用重定向;应该在POST()方法中响应POST请求,而不是通过重定向到GET方法。

    存储到数据存储的“会话变量”不会遵循重定向;您必须从get()处理程序中的数据存储中获取它,尽管没有在cookie或其他东西中设置会话ID,这根本不会实现会话,而是允许任何获取/使用POST请求中发送的任何值,无论它是由他们还是其他人发送的。为什么要使用重定向;应该在POST()方法中响应POST请求,而不是通过重定向到GET方法