如何访问Flask路由中的查询字符串?

如何访问查询参数或Flask路由中的查询字符串?这在Flask文档中并不明显。

下面的示例路由/data说明了我希望访问该数据的上下文。如果有人请求像example.com/data?abc=123这样的东西,我希望访问字符串?abc=123或能够检索像abc这样的参数值。

@app.route("/data")
def data():
# query_string = ???
return render_template("data.html")
521476 次浏览
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.decode()

这里有一个例子:

from flask import request


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


return request.query_string

要访问查询字符串中传递的单个已知参数,可以使用request.args.get('param')。这就是“权利”。据我所知,这是一种方法。

ETA:在进一步讨论之前,您应该问问自己为什么需要查询字符串。我从来没有拉入原始字符串- Flask有以抽象方式访问它的机制。你应该使用它们,除非你有一个令人信服的理由不这样做。

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/

我们可以通过使用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 Blueprints - https://flask.palletsprojects.com/en/1.1.x/blueprints/使它更加模块化

让我们考虑将名字作为查询字符串的一部分传递 / web_url / ?约翰first_name = < / p >
## 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
    

正如你所看到的,这只是一个小例子-你可以获取多个值+格式化这些并使用它或将其传递到模板文件。

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

访问它
date = request.args.get('date')

不要忘记添加“request”到从flask导入的列表, 例如< / p >

from flask import request

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

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)

输出:

query parameters in Flask route

引用:

  1. query_string上的官方API文档

对查询字符串尝试这样做:

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)

< >强输出: # EYZ0 < / p >

如果请求是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)

从flask请求对象中检索的查询字符串的每一种形式,如O'Reilly flask Web Devleopment所述:

O'Reilly Flask Web Development开始,正如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是“包含随请求提交的所有表单字段的字典”。我这么说是为了说明这一点:flask请求对象中有另一个名为values的字典属性可用。values是“结合了formargs中的值的字典。”检索它看起来像这样:

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的路径和查询字符串部分”。比如:

from flask import request


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

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

from flask import request


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

快乐黑客:)

下面的实现对我来说很有效。

from flask import request
def getVerificationStatus():
try:
requestId=int(request.args.get('requestId'))
print(requestId)
status= verificationStepRepository.getVerificationStatus(requestId)
return tb.responsify(200, "success", status)
except Exception as e:
return errorHandler.dispatchInternalServerError(str(e))

我更喜欢

user = request.args['user'] if 'user' in request.args else 'guest'

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

通过这种方式,您可以首先检查url实际上包含查询字符串

通常我们只是想将整个查询字符串映射到适当的python数据结构中,然后从那里获取它。适当的结构是一个多字典,因为关键字可以重复,例如我们需要处理A=123&A=456&B=789。多字典是一个二元组列表,其中每个二元组的第一项是键,第二项是值列表,因此上面的内容转到[('A',['123','456']),('B',['789'])]。所有这一切都是由

qstr = request.args.lists() # A generator for the multi-dict
qstr = list(qstr) # To get the actual multi-dict

如果你想要的只是一个字典,其中第一次出现重复的关键字被使用,你可以直接去

qstr = request.args.to_dict()