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

时间:2012-08-02 09:04:41

标签: python flask query-string

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

所以

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

10 个答案:

答案 0 :(得分:611)

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

答案 1 :(得分:199)

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

答案 2 :(得分: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())

您还可以使用Flask蓝图 - http://flask.pocoo.org/docs/0.10/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

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

答案 3 :(得分:12)

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/

答案 4 :(得分:4)

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

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

from flask import request

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

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

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

from flask import request

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

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

然后,有一个form属性,该属性不包含查询字符串,但包含在 包含的另一个属性的一部分中查询字符串,我将立即列出。不过,首先,form是“包含与请求一起提交的所有表单字段的字典”。我这样说是:烧瓶请求对象中还有一个名为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的路径和查询字符串部分”。通过ejemplo:

from flask import request

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

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

from flask import request

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

快乐黑客:)

答案 5 :(得分:1)

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

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. Official API documentation on query_string

答案 6 :(得分:1)

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

答案 7 :(得分:1)

下面的实现对我有用。

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

答案 8 :(得分:0)

可以使用request.args.get()完成此操作。 例如,如果您的查询字符串具有字段date,则可以使用

对其进行访问
date = request.args.get('date')

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

from flask import request

答案 9 :(得分:0)

尝试像这样查询字符串:

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)

输出: enter image description here