如何在Flask上获取查询字符串?


408

从烧瓶文档中关于如何获取查询字符串的知识并不明显。我是新手,看了看文档,找不到!

所以

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

11
它位于快速入门下的文档中:flask.pocoo.org/docs/quickstart/#the-request-object
Jarus 2012年

但是,它不使用术语“查询字符串”。它只是称它们为参数。>要访问通过URL(?key = value)提交的参数,可以使用args属性:>> searchword = request.args.get('key','')
Ion Freeman

Answers:


779
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')

70
本示例返回在查询字符串中传递的“ user”参数的值,而不是查询字符串本身。“查询字符串”表示问号之后和井号之前(如果有)的所有内容。
Lyndsy Simon

45
考虑到它与问题有关,仍然是一个有用的答案。如此有效且+1
Necronet

8
否-与dict和.get一样,您只会得到None。
JPEG_

5
@LyndsySimon:发现得很好。但是由于此答案正确回答了我的Google搜索词所涉及的问题(“烧瓶获取请求参数”),因此无论如何我都在投票。我也是一个书呆子,但是我将其归结为网络神秘主义。😉
迈克尔Scheper

5
我没有意见!我对这个问题的评论一直是SO点和整体业障的源泉。:)骇客骇客!
Lyndsy Simon

237

完整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具有以抽象方式访问它的机制。除非您有令人信服的理由不使用,否则应使用它们。


11
+1为实际正确答案。诸如Dropbox之类的OAuth流会定期请求重定向URL,以将令牌传递到。想要自己解析查询字符串是很有意义的。
理查德·洛维耶特(RichardLøvehjerte)

错误答案的虚拟-1。尽管从字面上看是正确的,但它并未提供OP所寻找的内容,而已接受的答案却可以提供。DWIM FTW。发挥出色的SO指向磁铁。
戴夫

15

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/


14

我们可以使用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())

您还可以通过使用Flask蓝图使它更具模块化-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

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


11

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

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

使用示例request.query_string

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)

输出:

Flask路由中的查询参数

参考文献:

  1. 有关query_string的官方API文档

1
这应该是公认的答案,因为它给出了OP所寻找的确切解决方案。
constt

答案不正确时,很难与+600对抗。
马文

4

像这样尝试查询字符串:

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 '''<h1>The Query String are...{}:{}:{}</h1>''' .format(args1,args2,args3)


if __name__ == '__main__':

    app.run(debug=True)

输出: 在此处输入图片说明


request.args ['args1']最好写成request.args.get('args1')
imbatman

1

O'Reilly Flask Web开发中所述,可以从烧瓶请求对象中检索每种形式的查询字符串:

O'Reilly Flask Web开发,如Manan Gouhari先前所述,首先,您需要导入请求:

from flask import request

request是Flask公开的对象,它是一个名为(您猜对了)的上下文变量request。顾名思义,它包含客户端包含在HTTP请求中的所有信息。该对象具有许多可以分别检索和调用的属性和方法。

您有很多request属性,其中包含要选择的查询字符串。在这里,我将列出以任何方式包含查询字符串的每个属性,以及O'Reilly对该书的描述。

首先args是“字典,其中所有参数都在URL的查询字符串中传递”。因此,如果要将查询字符串解析为字典,则可以执行以下操作:

from flask import request

@app.route('/'):
    queryStringDict = request.args

(正如其他人指出的,您也可以使用.get('<arg_name>')从字典中获取特定值)

然后,有form属性,它确实包含查询字符串,但它包含在另一个属性的部分包括查询字符串,我将立即上市。不过,首先form是“具有随请求一起提交的所有表单字段的字典”。我这么说是:烧瓶请求对象中还有另一个字典属性可用valuesvalues是“结合了form和中的值的字典args。” 检索将类似于以下内容:

from flask import request

@app.route('/'):
    formFieldsAndQueryStringDict = request.values

(再次,用于.get('<arg_name>')从字典中获取特定项目)

另一个选项是query_string“ URL的查询字符串部分,作为原始二进制值”。例子:

from flask import request

@app.route('/'):
    queryStringRaw = request.query_string

然后,还有一个额外的好处full_path是“ URL的路径和查询字符串部分”。通过ejemplo:

from flask import request

@app.route('/'):
    pathWithQueryString = request.full_path

最后,url“客户端请求的完整URL”(包括查询字符串):

from flask import request

@app.route('/'):
    pathWithQueryString = request.url

快乐黑客:)


0

可以使用来完成request.args.get()。例如,如果您的查询字符串包含字段date,则可以使用进行访问

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

别忘了request在烧瓶的导入列表中添加“ ”,即

from flask import request

虽然您的答案在技术上是正确的,但已经建议使用其他答案(旧的和较完整的)request.args.get();对旧问题的新答案应包含以前未提到的内容。
lfurini

0

如果请求为GET并且我们传递了一些查询参数,

fro`enter code here`m flask import request
@app.route('/')
@app.route('/data')
def data():
   if request.method == 'GET':
      # Get the parameters by key
      arg1 = request.args.get('arg1')
      arg2 = request.args.get('arg2')
      # Generate the query string
      query_string="?arg1={0}&arg2={1}".format(arg1, arg2)
      return render_template("data.html", query_string=query_string)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.