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

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

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

当前回答

通常我们只是想将整个查询字符串映射到适当的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 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')

这个准则对我很有效:

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)

完整的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/

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

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