如何使用python代码从Web浏览器的地址栏获取附加在url中的参数

时间:2014-04-21 06:00:04

标签: python url oauth-2.0 openerp

在使用OAuth 2.0时,在允许我的网络应用程序通过Google登录访问目录API后,Google会将我重定向回我的网络应用程序页面,并在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 个答案:

答案 0 :(得分:1)

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

看看https://doc.openerp.com/trunk/server/routing/,OpenERP似乎为url路由和请求包装器提供了一些辅助类。

我建议使用openerp.http.HttpRequest。


编辑Reading over this document,似乎OpenERP为您提供了他们称之为“控制器”的控制器'基类,其方法可用于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类,该类为您的控制器提供所有基本方法和属性。每种方法都有一个decorater(&#39; @ http.route&#39;)告诉基类这个方法是用于url路由的。

这来自文档:

  

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

因此,在此示例中,您的网络应用会将www.mysite.com/my_url/some_html发送到一个页面,上面写着这是一个测试&#39;在html标题标记中。

但是你想要捕获查询字符串(在网址中的&#39;?&#39;之后的变量)。根据相同的文档,这也可以通过控制器类完成。在您在问题中提供的网址中,查询字符串由变量&#39; code&#39;组成。和&#39; db&#39;以及它们的相应变量。这种使用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的参数,并能够对其执行某些操作。

希望这很有用。