使用OAuth 2.0时,在允许我的Web应用程序通过Google登录访问Directory API之后,Google会将我重定向到我的Web应用程序页面,并在URL上附加了授权代码。

像这样->>> http://www.mydomain:8069 /?code = 4%2FZ6tHz_FoteiCGYMfbADu3_1.AjMpYP1TpHAVXE-sT2ZLcbTj9a4FiwI&db = training_crm#menu_id = 108&action = 101

现在,我需要从URL提取此代码,以便交换Acess令牌。 如何使用Python代码在URL中获取此代码参数?

(**在OpenERP上工作)

===============>>#1 票数:1

我相信您所追求的是一种从查询字符串中获取数据的方法。 访问方式取决于您的Web服务器与python模块的接口方式。 它通常存储在某些环境变量中,网络服务器会将其作为来自客户端的HTTP请求的一部分传递给您的应用程序。

查看https://doc.openerp.com/trunk/server/routing/ ,似乎OpenERP为您提供了一些用于URL路由和请求包装的帮助程序类。

我建议使用openerp.http.HttpRequest。


编辑阅读本文档后 ,似乎OpenERP为您提供了他们所谓的“控制器”基类,该类的方法可用于url路由。 (即,根据URL决定向客户端呈现什么内容)

如果文件夹结构是这样的:

web_example
├── controllers
│   ├── __init__.py
│   └── my_controllers.py
├── __init__.py
└── __openerp__.py

然后,您可以在my_controllers.py文件中定义这些方法。 这是my_controller.py模块的示例(来自上述文档):

class MyController(http.Controller):

    @http.route('/my_url/some_html', type="http")
    def some_html(self):
        return "<h1>This is a test</h1>"

    @http.route('/my_url/some_json', type="json")
    def some_json(self):
        return {"sample_dictionary": "This is a sample JSON dictionary"}

该类继承自OpenERP.http.Controller类,该类提供了“控制器”的所有基本方法和属性。 每个方法都有一个修饰符('@ http.route'),该修饰符告诉基类此方法用于url路由。

这来自文档:

每次使用@ http.route()定义方法时,它都会定义一个要匹配的URL。 例如,some_html()方法将被称为客户端查询/ my_url / some_html url。

因此,在此示例中,您的Web应用程序会将www.mysite.com/my_url/some_html路由到html标题标记中显示“这是测试”的页面。

但是您想捕获查询字符串(URL中“?”之后的变量)。 根据相同的文档,这也可以通过控制器类来完成。 在问题中提供的url中,查询字符串由变量'code'和'db'以及它们相应的变量组成。 这种使用HTTP在两台机器之间传输数据的方法称为GET方法。

为了使服务器对这些变量进行处理,可以再次使用控制器类。 在每个@http_route方法中,您都可以将HTTP参数作为该方法的命名参数。 例如:

class MyController(http.Controller):

    @http.route('/', type="http")
    def some_html(self, code, db):
        return "the code is {0}, the db is {1}".format(code,db)

然后,该方法将捕获您在问题中提供的url的参数,并能够对其进行处理。

希望这是有用的。

  ask by Jai translate from so

未解决问题?本站智能推荐: