2012-08-02 132 views
214

关于如何获取查询字符串的烧瓶文档不明显。我是新手,看着文档,找不到!如何在Flask上获取查询字符串?

所以

@app.route('/') 
@app.route('/data') 
def data(): 
    query_string=?????? 
    return render_template("data.html") 
+9

它位于quickstart下的文档中:http://flask.pocoo.org/docs/quickstart/#the-request-object – Jarus 2012-08-02 09:26:36

回答

407
from flask import request 

@app.route('/data') 
def data(): 
    # here we want to get the value of user (i.e. ?user=some-value) 
    user = request.args.get('user') 
+33

此示例返回在查询字符串中传递的“user”参数的值,而不是查询字符串本身。 “查询字符串”表示问号之后和井号之前的所有内容(如果存在的话)。 – 2012-08-02 16:32:03

+18

仍然是一个有用的答案,因为它与问题有关。如此有效且+1 – Necronet 2013-01-19 19:52:02

+1

如果用户不在场,这会引发异常吗? (如果参数只是一个字典,我猜不是。) – 2016-10-23 07:35:48

152

的完整URL可作为request.url,查询字符串可作为request.query_string

下面是一个例子:

from flask import request 

@app.route('/adhoc_test/') 
def adhoc_test(): 

    return request.query_string 

要访问查询字符串中传递的个体称为参数,可以使用request.args.get('param')。就我所知,这是做到这一点的“正确”方式。

ETA:在你走得更远之前,你应该问自己为什么要查询字符串。我从来不需要拉入原始字符串 - Flask具有以抽象方式访问它的机制。你应该使用这些,除非你有一个令人信服的理由不要。

+2

为了可读性,你可以使用'。查询'而不是'[4]' – jfs 2012-08-02 21:34:31

+0

确实 - 我实际上应该阅读规范下一次:) – 2012-08-03 01:50:24

+0

另请参阅http://stackoverflow.com/a/11792690 – jfs 2012-08-04 09:47:29

11

Werkzeug/Flask已经为你解析了一切。无需与再里urlparse做同样的工作:

from flask import request 

@app.route('/') 
@app.route('/data') 
def data(): 
    query_string = request.query_string ## There is it 
    return render_template("data.html") 

的请求和响应对象的完整文档是在WERKZEUG:http://werkzeug.pocoo.org/docs/wrappers/

10

我们可以通过使用request.query_string做到这一点。

例子:

让我们考虑view.py

from my_script import get_url_params 

@app.route('/web_url/', methods=('get', 'post')) 
def get_url_params_index(): 
    return Response(get_url_params()) 

您还可以通过使用瓶蓝图变得更加模块化 - http://flask.pocoo.org/docs/0.10/blueprints/

让我们考虑第一个名字被传递作为查询的一部分字符串 /web_url /?first_name = john

## here is my_script.py 

## import required flask packages 
from flask import request 
def get_url_params(): 
    ## you might further need to format the URL params through escape.  
    firstName = request.args.get('first_name') 
    return firstName 

正如你所看到的,这只是一个小例子 - 你可以获取多个值并将它们合成并使用它或将它传递给模板文件。