【问题标题】:Flask object has no attribute 'validate_on_submit'Flask 对象没有属性“validate_on_submit”
【发布时间】:2019-09-24 17:32:20
【问题描述】:

wtforms 的 form.validate_on_submit() 方法有问题,每次提交表单时都会抛出以下错误:

'LoginForm' object has no attribute 'validate_on_submit'

forms.py:

from wtforms import Form, validators, StringField, PasswordField

class LoginForm(Form):
    email = StringField('Email Address', [validators.DataRequired(message='Field required')])
    password = PasswordField('Password', [validators.DataRequired(message='Field required')])

routes.py

from flask import Flask, escape, request, render_template, redirect, url_for
from securepi import app, tools
from securepi.forms import LoginForm
@app.route('/login/', methods=['GET', 'POST'])
def login():
error = None
try:
    form = LoginForm(request.form)

    if request.method == "POST" and form.validate_on_submit():
        email = str(form.email.data)
        password = tools.encrypt(str(form.password.data))
        print("email:  {}, password: {}".format(email, password))


        # if valid account create session and redirect to index


        return redirect(url_for('index'))
    else:
        print("FAIL")
        error = "Invalid username or password"

except Exception as e:
    return(str(e))

return render_template('login.html', form = form)

和表格

<form action="" method="post">
  <div class="form-group has-feedback">
    <input type="email" name="email" class="form-control" placeholder="Email" value="{{ request.form.email }}">
    <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
  </div>
  <div class="form-group has-feedback">
    <input type="password" name="password" class="form-control" placeholder="Password" value="{{ request.form.password }}">
    <span class="glyphicon glyphicon-lock form-control-feedback"></span>
  </div>
  <div class="row">
    <!-- /.col -->
    <div class="col-xs-12">
      <button type="submit" class="btn btn-primary btn-block">Log in</button>
    </div>
    <!-- /.col -->
  </div>
</form>

【问题讨论】:

  • wtforms.Form 有一个 validate 方法。 validate_on_submit 是一个 flask_wtf.Form 方法。

标签: python python-3.x validation flask wtforms


【解决方案1】:

您可以尝试将您的 forms.py 更改为以下内容吗?

from flask_wtf import FlaskForm
from wtforms import validators, StringField, PasswordField

class LoginForm(FlaskForm):
    email = StringField('Email Address', [validators.DataRequired(message='Field required')])
    password = PasswordField('Password', [validators.DataRequired(message='Field required')])

【讨论】:

    【解决方案2】:

    Forms class 文档说:

    验证()

    通过对每个字段调用 validate 来验证表单,将任何额外的 Form.validate_ 验证器传递给字段验证器。

    您似乎正在尝试验证表单中缺少的 on_submit 字段。只需使用validate() 即可解决问题。

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 2015-04-14
      • 2014-11-11
      • 2020-01-02
      • 2016-08-24
      • 2018-12-23
      • 2020-04-05
      • 2014-04-15
      相关资源
      最近更新 更多