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

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)

  • 此示例返回查询字符串中传递的"user"参数的值,而不是查询字符串本身."查询字符串"表示问号之后和井号之前的所有内容(如果存在). (59认同)
  • 考虑到它与问题有关,仍然是一个有用的答案.如此有效且+1 (38认同)
  • 不 - 就像dict和.get一样,你只会得到无. (7认同)
  • @LyndsySimon:很好看.但是,由于这个答案正确地回答了我的谷歌搜索术语提到的问题('flask get request parameter')我无论如何都要投票.我也是一个学究癖者,但我正在将这归结为网络神秘主义. (5认同)
  • 没有我的争论!我对这个问题的评论一直是SO点和整体业力的持续来源.:)快乐的黑客! (5认同)
  • 如果用户不在场,这会引发异常吗?(如果 args 只是一个字典,我想不会。) (2认同)

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具有以抽象方式访问它的机制.你应该使用那些,除非你有令人信服的理由不这样做.

  • +1为实际正确答案.Dropbox等OAuth流程会定期要求重定向URL将令牌传递给.您想要自己解析查询字符串是完全合理的. (7认同)
  • @HasinthaAbeykoon 是的,但在这种情况下,您不需要摄取整个查询字符串,您应该知道需要检查哪些键,并通过“request.args.get”专门请求这些键。 (2认同)

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字典,结合中的值formargs”。检索它看起来像这样:

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)

快乐黑客:)


mig*_*mon 6

我更喜欢

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 是否确实包含查询字符串

  • 为什么不 user = request.args.get('user', 'guest') ? (11认同)

Mic*_*ons 5

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

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)

输出:

Flask路由中的查询参数

参考文献:

  1. 有关query_string的官方API文档


小智 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)

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