如何访问查询参数或Flask路由中的查询字符串?这在Flask文档中并不明显。
下面的示例路由/数据说明了我想要访问该数据的上下文。如果有人请求example.com/data?abc=123这样的东西,我想访问字符串?abc=123,或者能够检索像abc这样的参数值。
@app.route("/data")
def data():
# query_string = ???
return render_template("data.html")
如何访问查询参数或Flask路由中的查询字符串?这在Flask文档中并不明显。
下面的示例路由/数据说明了我想要访问该数据的上下文。如果有人请求example.com/data?abc=123这样的东西,我想访问字符串?abc=123,或者能够检索像abc这样的参数值。
@app.route("/data")
def data():
# query_string = ???
return render_template("data.html")
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可作为请求。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 =约翰
## 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 = request.args.get('date')
别忘了在从烧瓶进口的清单上加上“请求”, 即。
from flask import 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_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)
输出:
如果请求是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)
在O'Reilly flask Web development中描述的从flask请求对象中检索的查询字符串的每一种形式:
来自O'Reilly Flask Web Development,正如Manan Gouhari之前所说,首先你需要导入请求:
from flask import request
request是一个由Flask作为上下文变量(你猜对了)request公开的对象。顾名思义,它包含客户端包含在HTTP请求中的所有信息。该对象有许多属性和方法,您可以分别检索和调用它们。
您有相当多的请求属性,其中包含可供选择的查询字符串。在这里,我将列出以任何方式包含查询字符串的每个属性,以及O'Reilly书中对该属性的描述。
首先是args,它是“一个包含URL查询字符串中传递的所有参数的字典”。所以如果你想把查询字符串解析成一个字典,你可以这样做:
from flask import request
@app.route('/'):
queryStringDict = request.args
(正如其他人指出的那样,你也可以使用.get('<arg_name>')从字典中获取特定的值)
Then, there is the form attribute, which does not contain the query string, but which is included in part of another attribute that does include the query string which I will list momentarily. First, though, form is "A dictionary with all the form fields submitted with the request." I say that to say this: there is another dictionary attribute available in the flask request object called values. values is "A dictionary that combines the values in form and args." Retrieving that would look something like this:
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'
over
user = request.args.get('user')
通过这种方式,您可以首先检查url实际上包含查询字符串
通常我们只是想将整个查询字符串映射到适当的python数据结构中,然后从那里获取它。合适的结构是多字典,因为关键字可以重复,例如我们需要处理a = 12123a =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()
这个准则对我很有效:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def search():
query = request.args
for key,value in query.items():
print(key,value)
return "Hello World"
if __name__ == '__main__':
app.run(debug=True)