Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 无法在appengine数据存储中存储数据_Python_Google App Engine_Github - Fatal编程技术网

Python 无法在appengine数据存储中存储数据

Python 无法在appengine数据存储中存储数据,python,google-app-engine,github,Python,Google App Engine,Github,我正在尝试制作一个简单的appengine应用程序,其中用户通过Github登录,其公共信息(仅用户ID)存储在数据存储中。下面是我写的简单脚本: import webapp2 from google.appengine.ext import db import json import requests form=""" <html> <body> <a href="https://github.com/login/oauth/authorize?state=m

我正在尝试制作一个简单的appengine应用程序,其中用户通过Github登录,其公共信息(仅用户ID)存储在数据存储中。下面是我写的简单脚本:

import webapp2
from google.appengine.ext import db

import json
import requests

form="""
<html>
<body>
<a href="https://github.com/login/oauth/authorize?state=myapp&redirect_uri=(redirection uri)&client_id=(myclientid)&scope=user">Login</a>
</body>
</html>
"""

class Userdata(db.Model):
    userid = db.StringProperty()

class Devhandler(webapp2.RequestHandler):
    def get(self):
        url_get = self.request.GET
        state=url_get['state']
        code=url_get['code']
        self.response.headers["Content-Type"] = "application/json"
        url = 'https://github.com/login/oauth/access_token?client_id=(clientid)&client_secret=(my secretclient id)&redirect_uri=(redirect uri)&code='+code
        r=requests.post(url)
        req=str(r.content)
        access_token = ""
        i=13
        while(req[i]!='&'):
            access_token = access_token + req[i]
            i = i + 1

        result_url = 'https://api.github.com/user?access_token='+str(access_token)
        result = requests.get(result_url)
        fd = json.loads(result.content) #fd contains the user data in json format!
        userid = fd['login'] 
        user_instance = Userdata(userid=userid)
        user_instance.put()
        self.redirect('/welcome')


class Profilehandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("Welcome!")



app = webapp2.WSGIApplication([
    ('/',Mainhandler),
    ('/dev',Devhandler),
    ('/welcome',Profilehandler)
    ],debug=True)
导入webapp2
从google.appengine.ext导入数据库
导入json
导入请求
form=”“”
"""
类Userdata(db.Model):
userid=db.StringProperty()
类Devhandler(webapp2.RequestHandler):
def get(自我):
url\u get=self.request.get
state=url\u get['state']
code=url\u get['code']
self.response.headers[“内容类型”]=“应用程序/json”
url='1〕https://github.com/login/oauth/access_token?client_id=(clientid)&client\u secret=(我的secretclient id)&redirect\u uri=(redirect uri)&code='+code
r=请求.发布(url)
req=str(r.content)
access_token=“”
i=13
while(请求[i]!='&'):
访问令牌=访问令牌+请求[i]
i=i+1
结果https://api.github.com/user?access_token='+str(访问令牌)
result=requests.get(结果\ url)
fd=json.load(result.content)#fd包含json格式的用户数据!
userid=fd['login']
user\u instance=Userdata(userid=userid)
user_instance.put()
self.redirect(“/welcome”)
类Profilehandler(webapp2.RequestHandler):
def get(自我):
self.response.out.write(“欢迎!”)
app=webapp2.WSGIApplication([
(“/”,Mainhandler),
('/dev',Devhandler),
(“/welcome”,Profilehandler)
],debug=True)
当我运行上述代码时,一切正常,但唯一的问题是,我无法存储用户数据。当我打开appengine数据存储查看器时,我什么也找不到(数据存储中没有用户!)。代码有什么问题?为什么我无法存储用户数据

PS:我的帐户没有问题,我可以轻松地在其他项目中存储数据。
如果有人能帮助我,我感到很高兴

是否确实调用了davhandle类的get方法?使用一些日志来测试它。 以防万一,如果你不知道:

导入日志记录
logging.info('anythng')

  • 代码中不存在Mainhandler
  • 你为什么需要请求
  • 如果直接使用ndb代替db,对您的项目更有利
  • 您是舒尔的吗?您不刷新页面/welcome而不是/
如果您实现了这一点,字符串值应该存储在数据存储中。如果没有,你还有另一个问题

class Userdata(db.Model):
  userid = db.StringProperty()

class Mainhandler(webapp2.RequestHandler):
  def get(self):
    user_instance = Userdata(userid="test")
    user_instance.put()
    self.redirect('/welcome')
在代码中添加日志以查看userid的内容,并在存储之前使用str强制此内容
user\u instance=Userdata(userid=str(userid))


如果无法在str中进行转换,则可能是字符编码问题。

您可能正在SDK Console data viewer中检查用户数据。尝试检查位于的数据存储。如果代码中没有bug,您肯定会在那里找到数据。

是的!有人叫它!当我添加self.response.write(userid)时,我可以得到这个人的userid作为输出。问题只在于数据存储。一切正常!试一试这个。logging.info(user\u instance.key().id())。只有当实体id写入数据库时,才会返回实体id让我现在试试!什么都没变!一切都和以前一样。数据未存储!你在日志里看到了什么?有身份证吗?我找到了数据!谢谢