如何用Python从浏览器地址栏获取URL中的参数
在使用OAuth 2.0的时候,当我允许我的网页应用通过Google登录访问目录API后,Google会把我重定向回我的网页应用,并在网址后面加上一个授权码。
现在我需要从这个网址中获取这个代码,以便用它来换取访问令牌。我该如何用Python代码来抓取这个网址中的代码参数呢?
(**正在使用OpenERP)
1 个回答
我觉得你想要的是一种从查询字符串中获取数据的方法。如何访问这些数据取决于你的网络服务器是如何和你的Python模块进行交互的。通常,这些数据会存储在一些环境变量中,网络服务器会把它们作为HTTP请求的一部分传递给你的应用。
从这个链接来看,OpenERP为你提供了一些帮助类,用于处理网址路由和请求封装。
我建议你使用openerp.http.HttpRequest。
编辑:通过阅读这份文档,似乎OpenERP提供了一个叫做“控制器”的基础类,你可以用它的方法来进行网址路由。(也就是说,根据网址决定展示给客户端什么内容)
如果你的文件夹结构是这样的:
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'),它告诉基础类这个方法是用于网址路由的。
这是文档中的内容:
每次你用@http.route()定义一个方法时,它就定义了一个要匹配的网址。例如,some_html()方法会在客户端查询/my_url/some_html网址时被调用。
所以在这个例子中,你的网页应用会把www.mysite.com/my_url/some_html路由到一个显示“这是一个测试”的HTML标题标签的页面。
但是你想要捕获查询字符串(网址中'?'后面的变量)。根据同样的文档,这也可以通过控制器类来完成。在你问题中提供的网址里,查询字符串由'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)
那么这个方法就能捕获你在问题中给出的网址的参数,并能够对其进行处理。
希望这些信息对你有帮助。