"csrf_token": ["The CSRF token is missing."],
来源:5-2 重写WTForms 二

慕慕5403139
2018-10-23
from app.libs.enums import ClientTypeEnum
from app.libs.redprint import Redprint
from app.models.user import User
from app.validators.forms import ClientForm, UserEmailForm
api = Redprint('client')
@api.route('/register', methods=['POST'])
def create_client():
# request.args.to_dict()
# 表单 json
# 网页 移动端
# 注册 登录
# 参数 效验 接受参数
# WTForms 验证表单
form = ClientForm().validate_for_api()
promise = {
ClientTypeEnum.USER_EMAIL: __register_user_by_email,
# ClientTypeEnum.USER_MINA: __register_user_by_mina,
}
promise[form.type.data]()
return 'success'
def __register_user_by_email():
# request.json['nickname'] 没有效验
form = UserEmailForm().validate_for_api()
User.register_by_email(form.nickname.data,
form.account.data,
form.secret.data)
validators/base.py
from flask import request
from flask_wtf import Form
from app.libs.eeror_code import ParameterException
class BaseForm(Form):
def __init__(self):
data = request.json
super(BaseForm, self).__init__(data=data)
def validate_for_api(self):
valid = super(BaseForm, self).validate()
if not valid:
# form errors
raise ParameterException(msg=self.errors)
return self
validators/forms.py
from wtforms import StringField, IntegerField
from wtforms.validators import DataRequired, Length, Email, Regexp, ValidationError
from app.libs.enums import ClientTypeEnum
from app.models.user import User
from app.validators.base import BaseForm as Form
class ClientForm(Form):
account = StringField(validators=[DataRequired(message='不允许为空'), Length(min=5, max=32)])
secret = StringField()
nickname = StringField()
type = IntegerField(validators=[DataRequired()])
def validate_type(self, value):
try:
client = ClientTypeEnum(value.data)
except ValueError as e:
raise e
self.type.data = client
class UserEmailForm(ClientForm):
account = StringField(validators=[
Email(message='invalidate email')
])
secret = StringField(validators=[
DataRequired(),
# password can only include letters, numbers and "_"
Regexp(r'^[A-Za-z0-9_*&$#@]{6,22}$')
])
nickname = StringField(validators=[DataRequired(),
Length(min=2, max=22)])
def validate_account(self, value):
if User.query.filter_by(email=value.data).first():
raise ValidationError()
老师这个为什么会出现这个问题
写回答
1回答
-
慕慕5403139
提问者
2018-10-24
form导入错误,应该导入wrforms而不是flask_wtf的Form
10
相似问题
token注销
回答 1
关于token验证的一些问题
回答 1