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

时间:2014-08-09 05:35:51

标签: 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=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)

当我运行上面的代码时,一切正常,但唯一的问题是,我无法存储用户数据。当我打开appengine数据存储查看器时,我什么都没找到(数据存储中没有用户!)。代码有什么问题?为什么我无法存储用户数据?

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

3 个答案:

答案 0 :(得分:1)

您可能正在检查SDK控制台数据查看器中的用户数据。尝试在https://appengine.google.com/dashboard检查数据存储。如果您的代码中没有错误,您肯定会在那里找到您的数据。

答案 1 :(得分:0)

你确定得到了davhandle类的方法吗?使用一些日志记录来测试它。 如果您不知道,请加入:

  

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

答案 2 :(得分:0)

  • 代码中不存在您的Mainhandler。
  • 为什么需要请求?
  • 如果直接使用ndb代替db,那么对你的项目来说会更好。
  • 你是否真的不要刷新页面/欢迎来代替/?

如果您实现此功能,则字符串值应存储在数据存储区中。如果没有,你还有其他问题。

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_instance = Userdata(userid=str(userid))

如果str中的转换不可能,那就是字符编码问题。