面试题答案
一键面试在Flask中进行请求参数验证,常见的方法有以下几种:
使用 Flask-Request-Validator
扩展
- 安装:
pip install Flask-Request-Validator
- 示例代码:
在此示例中,from flask import Flask, request from flask_request_validator import validate_params, Param, GET app = Flask(__name__) @app.route('/example', methods=['GET']) @validate_params( Param('param1', GET, int, required=True), Param('param2', GET, str, required=False) ) def example_route(param1, param2=None): return { 'param1': param1, 'param2': param2 } if __name__ == '__main__': app.run(debug=True)
@validate_params
装饰器用于验证GET
请求中的参数。Param
类定义了参数名、请求方法、期望的数据类型以及是否必填。
手动验证
- 示例代码:
在这个手动验证的例子中,首先检查from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/example', methods=['GET']) def example_route(): param1 = request.args.get('param1') param2 = request.args.get('param2') if param1 is None: return jsonify({'error': 'param1 is required'}), 400 try: param1 = int(param1) except ValueError: return jsonify({'error': 'param1 must be an integer'}), 400 return { 'param1': param1, 'param2': param2 } if __name__ == '__main__': app.run(debug=True)
param1
是否存在,不存在则返回错误。然后尝试将param1
转换为整数,如果转换失败,也返回错误。
使用 WTForms
进行验证(适用于更复杂的表单验证场景,也可用于API参数验证)
- 安装:
pip install wtforms
- 示例代码:
这里定义了一个from flask import Flask, request, jsonify from wtforms import Form, IntegerField, StringField from wtforms.validators import DataRequired app = Flask(__name__) class RequestForm(Form): param1 = IntegerField('param1', validators=[DataRequired()]) param2 = StringField('param2') @app.route('/example', methods=['GET']) def example_route(): form = RequestForm(request.args) if not form.validate(): return jsonify({'error': form.errors}), 400 return { 'param1': form.param1.data, 'param2': form.param2.data } if __name__ == '__main__': app.run(debug=True)
RequestForm
类,继承自Form
。通过IntegerField
和StringField
定义参数类型,并使用DataRequired
验证器指定param1
为必填。在路由函数中,使用form.validate()
方法进行验证。