关于python:如何在Flask上获取查询字符串?

How do you get a query string on Flask?

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

1
2
3
4
5
@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")


1
2
3
4
5
6
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')


完整URL以request.url的形式提供,查询字符串以request.query_string的形式提供。

这是一个例子:

1
2
3
4
5
6
from flask import request

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

    return request.query_string

要访问查询字符串中传递的单个已知参数,可以使用request.args.get('param')。据我所知,这是"正确"的做法。

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


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

例:

让我们考虑一下view.py

1
2
3
4
5
from my_script import get_url_params

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

您还可以使用Flask Blueprints使其更加模块化 - http://flask.pocoo.org/docs/0.10/blueprints/

让我们考虑将名字作为查询字符串的一部分传递
/的web_url /?如first_name =约翰

1
2
3
4
5
6
7
8
## 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

如您所见,这只是一个小例子 - 您可以获取多个值+合成它们并使用它或将其传递到模板文件中。


Werkzeug / Flask已经为您解析了一切。不需要再次使用urlparse做同样的工作:

1
2
3
4
5
6
7
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/


尝试这样查询字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from flask import Flask, request

app = Flask(__name__)

@app.route('/parameters', methods=['GET'])
def query_strings():

    args1 = request.args['args1']
    args2 = request.args['args2']
    args3 = request.args['args3']

    return '''The Query String are...{}:{}:{}''' .format(args1,args2,args3)


if __name__ == '__main__':

    app.run(debug=True)

输出:
enter image description here


我来这里寻找查询字符串,而不是如何从查询字符串中获取值。

request.query_string将URL参数作为原始字节字符串(Ref 1)返回。

使用request.query_string的示例:

1
2
3
4
5
6
7
8
9
10
from flask import Flask, request

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_query_string():
    return request.query_string

if __name__ == '__main__':
    app.run(debug=True)

输出:

query parameters in Flask route

参考文献:

  • 有关query_string的官方API文档

  • 这可以使用request.args.get()完成。
    例如,如果您的查询字符串有一个字段date,则可以使用它来访问它

    1
    date = request.args.get('date')

    不要忘记将"request"添加到来自flask的导入列表中,

    1
    from flask import request