在使用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上工作)
答案 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的参数,并能够对其执行某些操作。
希望这很有用。