小能豆

如何访问 Flask 路由中的查询字符串?

py

如何访问 Flask 路由中的查询参数或查询字符串?Flask 文档中没有明确说明。

下面的示例路由/data说明了我想要访问该数据的环境。如果有人请求类似的东西example.com/data?abc=123,我希望访问字符串?abc=123或能够检索类似参数的值abc

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

阅读 21

收藏
2024-09-20

共2个答案

小能豆

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')
2024-09-20
小能豆

在 Flask 中,您可以从请求对象访问查询参数。该request对象提供了一种访问查询参数、表单数据等的方法。要检索查询参数或查询字符串,请使用request.args查询参数和request.query_string原始查询字符串。

下面介绍了如何在 Flask 路由中访问查询参数和查询字符串:

访问查询参数

查询参数是通过request.args属性访问的,该属性是MultiDict包含所有查询参数的(本质上是一个类似字典的对象)。

访问特定查询参数的方法如下:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/data")
def data():
    # Get a specific query parameter, e.g., 'abc'
    abc_value = request.args.get('abc')

    # If you want to get all query parameters as a dictionary
    all_params = request.args.to_dict()

    return render_template("data.html", abc_value=abc_value, all_params=all_params)
  • request.args.get('abc')检索查询参数的值abc。如果abc查询字符串中不存在,则返回None或提供默认值(如果提供)。
  • request.args.to_dict()将所有查询参数转换为常规字典。

访问原始查询字符串

如果您需要原始查询字符串(包括),?则可以使用request.query_string。这将为您提供字节字符串形式的查询字符串。

访问方法如下:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/data")
def data():
    # Get the raw query string (including '?')
    raw_query_string = request.query_string.decode('utf-8')

    return render_template("data.html", raw_query_string=raw_query_string)
  • request.query_string将查询字符串作为字节返回,因此通常使用 将其解码为字符串.decode('utf-8')

概括

  • 查询参数:用于request.args访问查询参数。用于request.args.get('param_name')特定参数和request.args.to_dict()所有参数。
  • 原始查询字符串:用于request.query_string获取原始查询字符串。

下面是一个 Flask 应用程序的完整示例,演示了这两种方法:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/data")
def data():
    abc_value = request.args.get('abc')
    all_params = request.args.to_dict()
    raw_query_string = request.query_string.decode('utf-8')

    return render_template("data.html", 
                           abc_value=abc_value, 
                           all_params=all_params, 
                           raw_query_string=raw_query_string)

在此示例中,您可以data.html根据需要使用它来显示查询参数和原始查询字符串。

2024-09-20