参数验证
- 参数验证也叫参数解析。
Flask-Restful
插件提供了类似WTForms
来验证提交的数据是否合法的包,叫做reqparse
。
基本用法
-
借助于测试工程师 常用的接口测试工具
postman
来检验。 -
创建解析器对象
parser = reqparse.RequestParser()
-
利用解析器对象添加 需要验证的参数
parser.add_argument('uname',type=str,help='用户名验证错误!',required=True,trim=True)
-
利用解析器对象进行验证
args = parser.parse_args()
- 若正确,直接返回验证后合格的参数值
- 若错误,抛异常信息给客户端
-
添加类视图和url
api.add_resource(RegisterView,'/register/')
from flask import Flask,url_for,render_template
from flask_restful import Api,Resource,reqparse,inputs
app = Flask(__name__)
api = Api(app)
class RegisterView(Resource):
def post(self):
#验证用户名
#1.创建解析器对象
parser = reqparse.RequestParser()
#2.利用解析器对象添加 需要验证的参数
parser.add_argument('uname',type=str,help='用户名验证错误!',required=True,trim=True)
#3.利用解析器对象进行验证
args = parser.parse_args()
print(args)
return {"tips":"注册成功"}
api.add_resource(RegisterView,'/register/')
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
add_argument
方法可以指定这个字段的名字,这个字段的数据类型等,验证错误提示信息等。
default
:默认值,如果这个参数没有值,那么将使用这个参数指定的默认值。required
:是否必须。默认为False,如果设置为True,那么这个参数就必须提交上来。type
:这个参数的数据类型,如果指定,那么将使用指定的数据类型来强制转换提交上来的值。choices
:固定选项。提交上来的值只有满足这个选项中的值才符合验证通过,否则验证不通过。help
:错误信息。如果验证失败后,将会使用这个参数指定的值作为错误信息。trim
:是否要去掉前后的空格。type
:- 可以使用python自带的一些数据类型(如str或者int),
- 也可以使用
flask_restful.inputs
下的一些特定的数据类型来强制转换。 - 比如一些常用的:
url
:会判断这个参数的值是否是一个url,如果不是,那么就会抛出异常。regex
:正则表达式。date
:将这个字符串转换为datetime.date数据类型。如果转换不成功,则会抛出一个异常。
使用参数验证
from flask import Flask,url_for,render_template
from flask_restful import Api,Resource,reqparse,inputs
app = Flask(__name__)
api = Api(app)
#Flask_RESTful功能之参数验证
class RegisterView(Resource):
def post(self):
#用户名 密码 年龄 性别 出生日期 号码 个人主页
# 1.创建解析器对象
parser = reqparse.RequestParser()
#2.利用解析器对象添加 需要验证的参数
parser.add_argument('uname',type=str,help='用户名验证错误!',required=True,trim=True)
parser.add_argument('pwd', type=str, help='密码验证错误!',default="123456")
parser.add_argument('age',type=int,help='年龄验证错误!')
parser.add_argument('gender',type=str,choices=['男','女','双性'])
parser.add_argument('birthday',type=inputs.date,help='生日字段验证错误!')
parser.add_argument('phone',type=inputs.regex(r'1[3578]\d{9}'))
parser.add_argument('phomepage',type=inputs.url,help='个人中心链接验证错误!')
#3.利用解析器对象进行验证
args = parser.parse_args()
print(args)
return {"tips":"注册成功"}
api.add_resource(RegisterView,'/register/')
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)