Flask表单参数处理

1. 请求参数(Query Parameters)

请求参数通常是通过 URL 的查询字符串传递的。例如:/api/resource?name=John&age=30

获取请求参数

你可以使用 request.args 来获取查询参数。request.args 是一个类似字典的对象,可以通过键来访问对应的值。

from flask import Flask, request

app = Flask(__name__)

@app.route('/api/resource')
def get_resource():
    name = request.args.get('name')  # 获取 name 参数
    age = request.args.get('age')    # 获取 age 参数
    return f'Name: {name}, Age: {age}'

if __name__ == '__main__':
    app.run(debug=True)

注意事项

  • 默认值:如果某个参数不存在,request.args.get('param_name') 会返回 None。你可以通过传递第二个参数来设置默认值:request.args.get('param_name', 'default_value')

  • 多值参数:如果查询字符串中有多个同名参数(例如 ?name=John&name=Doe),你可以使用 request.args.getlist('name') 来获取所有值。

2. 表单参数(Form Parameters)

表单参数通常是通过 HTML 表单的 POST 请求传递的。表单数据会被编码为 application/x-www-form-urlencodedmultipart/form-data 格式。

获取表单参数

你可以使用 request.form 来获取表单参数。request.form 也是一个类似字典的对象。

注意事项

  • 文件上传:如果表单中有文件上传字段(<input type="file">),你需要使用 request.files 来获取文件对象。

  • 多值表单字段:类似于查询参数,如果表单中有多个同名字段,你可以使用 request.form.getlist('field_name') 来获取所有值。

3. JSON 参数

JSON 参数通常是通过 POST 请求的请求体传递的,请求头中包含 Content-Type: application/json

获取 JSON 参数

你可以使用 request.get_json() 来获取 JSON 数据。request.get_json() 会返回一个字典对象。

注意事项

  • Content-Type 检查request.get_json() 会自动检查请求头中的 Content-Type,如果不是 application/json,它会返回 None。如果你希望忽略 Content-Type 检查,可以传递 force=True 参数:request.get_json(force=True)

  • 默认值:如果 JSON 数据中某个字段不存在,data.get('field_name') 会返回 None。你可以通过传递第二个参数来设置默认值:data.get('field_name', 'default_value')

  • 错误处理:如果请求体不是有效的 JSON 格式,request.get_json() 会抛出 BadRequest 异常。你可以使用 try-except 块来捕获并处理这个异常。

4. 其他注意事项

  • 请求方法:确保你的路由方法(如 @app.route('/path', methods=['POST']))与实际请求方法匹配。例如,如果你期望 POST 请求,但客户端发送了 GET 请求,Flask 会返回 405 Method Not Allowed 错误。

  • 安全性:在处理用户输入时,始终要注意安全性。例如,对用户输入进行验证和清理,防止 SQL 注入、XSS 攻击等。

  • 性能:如果你在处理大量请求参数或 JSON 数据时遇到性能问题,可以考虑使用 Flask 的扩展(如 Flask-RESTful)来简化代码并提高性能。

总结

Flask 提供了简单而强大的工具来处理请求参数、表单参数和 JSON 参数。通过 request.argsrequest.formrequest.get_json(),你可以轻松地获取这些数据。然而,在实际开发中,你需要注意参数的默认值、多值字段、错误处理以及安全性等问题。

最后更新于