使用flask-wtf无法正确验证烧瓶形式

时间:2016-05-22 18:49:05

标签: python flask flask-wtforms

这是我的控制器代码

@auth.route('/login/', methods=['GET', 'POST'])
def signin():
    form = LoginForm(request.form)
    # return form.email.data
    if form.validate_on_submit():
        return form.email.data
        user = User.query.filter_by(email=form.email.data).first()
        if user and check_password_hash(user.password, form.password.data):
            session['user_id'] = user.id
            flash('Welcome %s' % user.name)
            return redirect(url_for('auth.home'))
        else:
            return "invalid username and password"
    return "Signin form"

表单代码

class LoginForm(Form):
    email    = TextField('Email Address', [
                Required(message='Forgot your email address?')])
    password = PasswordField('Password', [
                Required(message='Must provide a password. ;-)')])

我正在检查使用以下卷曲请求

curl -i localhost:9000/auth/login/ --data "email=a@b.com&password=b" -X POST

表单正在获取数据,但在validate_on_submit()处失败。是什么原因呢。另外如果是因为csrf令牌,请告诉我如何禁用它,因为我刚刚开始使用它。

我认为使用

在配置中禁用CSRF非常重要
CSRF_ENABLED     = False

然后使用加载配置     app.config.from_object('配置&#39)

但它似乎仍然无法正常工作。值得一提的另一件事是,这是一个休息api

1 个答案:

答案 0 :(得分:0)

刚刚解决了这个问题。 WTF-Form csrf不会被 Pattern pbold = Pattern.compile(".*\\*[ \n]*(.*?)[ \n]*\\*.*"); Matcher mbold = pbold.matcher(s); mbold.find(); 禁用。要全局禁用它,应将以下内容添加到配置

CSRF_ENABLED