正在加载...

Google App Engine 入门:用户系统服务

五月 4th, 2008
(本文译自:Google App Engine Getting Started) Google App Engine 在其SDK中提供了很多有用的服务。其中之一就是用户系统服务,这个服务让我们可以轻松的集成Google的用户帐号系统,这样使用我们的应用的用户,就不需要注册单独的帐号,直接使用现有的Google帐号就可以登录了。 下面,我们为Hello word加入用户判断功能。

使用Users

重新编辑helloworld/helloworld.py, 将代码修改如下:
import wsgiref.handlers

from google.appengine.api import users
from google.appengine.ext import webapp

class MainPage(webapp.RequestHandler):
def get(self):
user
= users.get_current_user()

if user:
self
.response.headers['Content-Type'] = 'text/plain'
self
.response.out.write('Hello, ' + user.nickname())
else:
self
.redirect(users.create_login_url(self.request.uri))

def main():
application
= webapp.WSGIApplication(
[('/', MainPage)],
debug
=True)
wsgiref
.handlers.CGIHandler().run(application)

if __name__ == "__main__":
main
()
刷新页面,你会发现直接跳转到了本地模拟的Google登录页面了,在这个页面输入你的用户名,你的web应用程序就会为你生成一个 User 对象。 当你发布你的应用之后,这个程序将会直接跳转到真正的Google登录页面,等你登录成功后再跳转到你的程序页面。

The Users API

我们仔细查看一下代码:
user = users.get_current_user()
如果用户已经登录, get_current_user() 返回 User 对象,否则返回 None.
if user:
self
.response.headers['Content-Type'] = 'text/plain'
self
.response.out.write('Hello, ' + user.nickname())
如果用户已经登录,向登录用户显示一段欢迎信息
else:
self
.redirect(users.create_login_url(self.request.uri))
如果用户尚未登录, 调用 webapp 跳转到Google 帐号登录页面。这个跳转页面包含了登录成功后要返回的URL (self.request.uri),用户登录成功后,就会回到指定的页面了。 想了解更多信息, 请查看 the Users reference.

接下来...

我们的应用程序,已经实现了可以显示登录者的名字了,接下来我们将为它增加留言的功能。 下一章 处理表单数据.

相关阅读:



“Google App Engine 入门:用户系统服务” 共有10条留言

  • petra On

    我想问一下为什么我按照上面的在本地实现,确打印出来错误呢?
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3206, in _HandleRequest
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3149, in _Dispatch
    base_env_dict=env_dict)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 525, in Dispatch
    base_env_dict=base_env_dict)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2450, in Dispatch
    CGIDispatcher.Dispatch(self, *args, **kwargs)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2402, in Dispatch
    self._module_dict)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2439, in curried_exec_cgi
    return ExecuteCGI(*args, **kwargs)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2310, in ExecuteCGI
    logging.debug('Executing CGI with env:\n%s', pprint.pformat(env))
    File "C:\Python27\lib\pprint.py", line 60, in pformat
    return PrettyPrinter(indent=indent, width=width, depth=depth).pformat(object)
    File "C:\Python27\lib\pprint.py", line 119, in pformat
    self._format(object, sio, 0, 0, {}, 0)
    File "C:\Python27\lib\pprint.py", line 137, in _format
    rep = self._repr(object, context, level - 1)
    File "C:\Python27\lib\pprint.py", line 230, in _repr
    self._depth, level)
    File "C:\Python27\lib\pprint.py", line 242, in format
    return _safe_repr(object, context, maxlevels, level)
    File "C:\Python27\lib\pprint.py", line 284, in _safe_repr
    for k, v in _sorted(object.items()):
    File "C:\Python27\lib\pprint.py", line 75, in _sorted
    with warnings.catch_warnings():
    File "C:\Python27\lib\warnings.py", line 327, in __init__
    self._module = sys.modules['warnings'] if module is None else module
    KeyError: 'warnings'

  • Todd On

    看的我是晕头转向的,无从着手,用了N年的Oblog系统,可以自己编写模版,怎么用这个GAE,一下子不知道怎么搞了,晕啊

  • gnolux On

    请问,我用了micolog 上传到 google app eng 了,当我切换到管理面板时,需要登入,但我是用自已的域名和邮件地址(非gmail,申请了app套件)注册的gae,它现在只能用 gmail 来登入,如何解决? 还是有其它我没注意的地方?

  • healer On

    为什么搞个这么简单的计算.... ....
    楼主玩得很有瘾,就是不介绍Java的开发,,,这样有相当部分的人看着会累~~~~

  • holeo On

    ~这个功能用的很少~

  • dddd On

    asdasd

  • benben On

    请问登录的页面能不能转到中文界面

  • Sean On

    麻烦问下 我按照上边代码输入 怎么刷新出来成空白页面了呢?

  • 徐明 On

    当然可以不用Google Account进行登录了,不过这种情况下,需要自己处理所有的细节,比如cookie,已经判断用户是否登录等等。。。
    如果使用Google Account方式登录,就不需要处理任何东西了,效果和使用.net form authorization是一样的。

  • tony On

    我想問,能不用google account 作為登入嗎。
    還一個白痴問題,有像 .net 的form authorization 的操作嗎?
    還是,每一個頁面都要查一下用戶狀態呢?

    謝謝

我要留言


google reader 抓虾
bloglines my yahoo
哪吒 鲜果
* 更多订阅本站方式请看 订阅帮助