如何定义拆分给定网址的方法(在谷歌应用引擎的python webapp2中)

时间:2014-09-09 15:30:44

标签: python google-app-engine webapp2

我想设置一个Google App Enging(GAE)应用程序,它为Twitter,Facebook等提供OAuth2和OAuth1的登录功能,因此我选择了似乎是authomatic模块(http://peterhudec.github.io/authomatic/)使用方便。 但是现在我遇到了一些问题(我对整个Web服务编程的东西都很陌生)。

所以我拥有的是:

import os
import sys
import webapp2
from authomatic import Authomatic
from authomatic.adapters import Webapp2Adapter

from config import CONFIG

authomatic_dir = os.path.join(os.path.dirname(__file__), 'authomatic')
sys.path.append(authomatic_dir)

# Instantiate Authomatic.
authomatic = Authomatic(config=CONFIG, secret='some random secret string')

# Create a simple request handler for the login procedure.
class Login(webapp2.RequestHandler):
    # The handler must accept GET and POST http methods and
    # Accept any HTTP method and catch the "provider_name" URL variable.
    def any(self, provider_name):#HERE IS THE PROBLEM
        ...

class Home(webapp2.RequestHandler):
    def get(self):
        # Create links to the Login handler.
        self.response.write('Login with <a href="login/gl">Google</a>.<br />')


# Create routes.
ROUTES = [webapp2.Route(r'/login/gl', Login, handler_method='any'),
          webapp2.Route(r'/', Home)]


# Instantiate the webapp2 WSGI application.
application = webapp2.WSGIApplication(ROUTES, debug=True)

我得到的错误是:

"any() takes exactly 2 arguments (1 given)"

我尝试用get()或post()替换任何一个,因为我已经有一个应用程序,我做了redirect('blog/42') 并且get(self, post_id)自动将42拆分为post_id(示例可在此处找到http://udacity-cs253.appspot.com/static/hw5.tgz(请查看blog.py中的PostPage类))

所以我真的不明白这里发生的所有魔法;有人可以解释一下如何解决这个错误,以便为get() - 参数provider_name分配值gl

2 个答案:

答案 0 :(得分:2)

而不是

webapp2.Route(r'/login/gl', Login, handler_method='any')

使用

webapp2.Route(r'/login/<provider_name>', Login, handler_method='any')

现在,/login/之后的路径将传递到def any参数中的provider_name

即。请求/login/gl会将“gl”作为provider_name传递给def any

答案 1 :(得分:1)

如果路径模板中有<...>个模板变量,则处理程序方法只接受参数。每个模板变量都填充一个参数。要为provider_name分配gl,其中gl是路径路径的一部分,请将ROUTES更改为以下内容:

ROUTES = [webapp2.Route(r'/login/<:.*>', Login, handler_method='any'),
          webapp2.Route(r'/', Home)]

更多信息:https://webapp-improved.appspot.com/api/webapp2.html#webapp2.Route