Tam*_*mpa 357 python query-string flask
关于如何获取查询字符串的烧瓶文档并不明显.我是新人,看着文档,找不到!
所以
@app.route('/')
@app.route('/data')
def data():
query_string=??????
return render_template("data.html")
Run Code Online (Sandbox Code Playgroud)
Kra*_*mar 680
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')
Run Code Online (Sandbox Code Playgroud)
Lyn*_*mon 216
完整URL可用request.url,并且查询字符串可用request.query_string.
这是一个例子:
from flask import request
@app.route('/adhoc_test/')
def adhoc_test():
return request.query_string
Run Code Online (Sandbox Code Playgroud)
要访问查询字符串中传递的单个已知参数,您可以使用request.args.get('param').据我所知,这是"正确"的做法.
ETA:在你走得更远之前,你应该问问自己为什么要查询字符串.我从来没有必要拉入原始字符串 - Flask具有以抽象方式访问它的机制.你应该使用那些,除非你有令人信服的理由不这样做.
Sim*_*pin 13
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")
Run Code Online (Sandbox Code Playgroud)
Werkzeug的请求和响应对象的完整文档:http://werkzeug.pocoo.org/docs/wrappers/
Pra*_*nar 13
我们可以使用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())
Run Code Online (Sandbox Code Playgroud)
您还可以使用Flask Blueprints使其更加模块化 - 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
Run Code Online (Sandbox Code Playgroud)
如您所见,这只是一个小例子 - 您可以获取多个值+合成它们并使用它或将其传递到模板文件中.
小智 7
如O'Reilly Flask Web Devleopment 中所述,可从Flask请求对象检索的每种形式的查询字符串:
来自O'Reilly Flask Web Development,正如 Manan Gouhari 之前所说,首先你需要导入请求:
from flask import request
Run Code Online (Sandbox Code Playgroud)
request是一个由 Flask 公开为名为(你猜对了)的上下文变量的对象request。顾名思义,它包含客户端在 HTTP 请求中包含的所有信息。该对象具有许多可以分别检索和调用的属性和方法。
您有很多request包含可供选择的查询字符串的属性。在这里,我将列出以任何方式包含查询字符串的每个属性,以及 O'Reilly 书中对该属性的描述。
首先args是“一个字典,其中包含在 URL 的查询字符串中传递的所有参数。” 因此,如果您希望将查询字符串解析为字典,您可以执行以下操作:
from flask import request
@app.route('/'):
queryStringDict = request.args
Run Code Online (Sandbox Code Playgroud)
(正如其他人所指出的,您也可以使用.get('<arg_name>')从字典中获取特定值)
然后,有form属性,它确实不包含查询字符串,但它包含在另一个属性的部分不包括查询字符串,我将立即上市。不过,首先form是“包含随请求提交的所有表单字段的字典”。我这么说是为了说:在flask 请求对象中有另一个可用的字典属性,称为values. values是“A字典,结合中的值form和args”。检索它看起来像这样:
from flask import request
@app.route('/'):
formFieldsAndQueryStringDict = request.values
Run Code Online (Sandbox Code Playgroud)
(同样,用于.get('<arg_name>')从字典中获取特定项目)
另一个选项是query_string“URL 的查询字符串部分,作为原始二进制值”。例如:
from flask import request
@app.route('/'):
queryStringRaw = request.query_string
Run Code Online (Sandbox Code Playgroud)
然后作为额外的奖励full_path是“URL 的路径和查询字符串部分”。例子:
from flask import request
@app.route('/'):
pathWithQueryString = request.full_path
Run Code Online (Sandbox Code Playgroud)
最后,url“客户端请求的完整 URL”(包括查询字符串):
from flask import request
@app.route('/'):
pathWithQueryString = request.url
Run Code Online (Sandbox Code Playgroud)
快乐黑客:)
我更喜欢
user = request.args['user'] if 'user' in request.args else 'guest'
Run Code Online (Sandbox Code Playgroud)
超过
user = request.args.get('user')
Run Code Online (Sandbox Code Playgroud)
这样,您可以首先检查 url 是否确实包含查询字符串
我来这里是在寻找查询字符串,而不是如何从查询字符串获取值。
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)
Run Code Online (Sandbox Code Playgroud)
输出:
参考文献:
小智 5
试试这样查询字符串:
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)
Run Code Online (Sandbox Code Playgroud)