from wtforms import Form, StringField, IntegerField
from wtforms.validators import Length, NumberRange
class SearchForm(Form):
# 参数校验规则:
# 1.定义的属性名q,page要与要校验的参数同名
# 2.根据要传入的参数类型选择不同的Field类进行实例化
# 3.传入一个数组,作为校验规则validators
# 4.可以设置默认值
q = StringField(validators=[DataRequired(), Length(min=1, max=30,message="查询关键字长度必须在1-30之间")], )
page = IntegerField(validators=[NumberRange(min=1, max=99)], default=1)
@web.route("/book/search/")
def search():
"""
搜索书籍路由
"""
# 实例化我们自定义的SearchForm,需要传入一个字典作为要校验的参数
form = SearchForm(request.args)
# validate()方法返回True/False来标示是否校验公国
if not form.validate():
# errors为错误信息提示(上面定义的message)
return jsonify(form.errors)
# 从form中获取校验后的参数,不从request里拿,因为我们可能会对数据进行预处理或者默认值的给定
q = form.q.data.strip()
page = form.page.data
isbn_or_key = is_isbn_or_key(q)
if isbn_or_key == 'isbn':
result = YuShuBook.search_by_isbn(q)
else:
result = YuShuBook.search_by_key(q)
return jsonify(result)