Python 烧瓶形式验证
这是我的登录表格。它不喜欢这种既需要大学表单字段又需要电子邮件表单字段的验证——我不断得到的错误是 TypeError:validate_university()缺少1个必需的位置参数:“email”Python 烧瓶形式验证,python,flask,Python,Flask,这是我的登录表格。它不喜欢这种既需要大学表单字段又需要电子邮件表单字段的验证——我不断得到的错误是 TypeError:validate_university()缺少1个必需的位置参数:“email” class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', val
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
password2 = PasswordField(('Repeat Password'), validators=[DataRequired(),EqualTo('password')])
university = SelectField("What University do you go to?",choices=[("soton","University of Southampton"),("solent","Solent
Southampton University")])
email=StringField("What is your university email?",validators=[DataRequired(),Email()])
submitpassword = SubmitField('Submit your password choice')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError(('Please use a different username.'))
def validate_university(self,university,email):
uni = University.query.filter_by(code=university.data).first()
if not email.data.endswith(uni.emailend):
raise ValidationError(("Please enter correct university e-mail for the university you attend."))
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError(('This e-mail is already in use. Please use a different email address.'))
这是相应的route python函数:
@bp.route('/reg1', methods=['GET', 'POST'])
def reg1():
if current_user.is_authenticated:
return redirect(url_for('main.index'))
form = RegistrationForm()
if form.validate_on_submit():
user = User(email=form.email.data,username=form.username.data)
user.set_password(form.password.data)
db.session.add(user)
db.session.commit()
flash('Congratulations, you are now a registered user!')
return redirect(url_for('auth.reg1'))
return render_template('auth/test.html', title='Register',
form=form,lenform=lenform,postcodes=postcodes)
我怎样才能修好它?为什么它不允许我为大学验证表单提供两个位置参数?
谢谢Cuastom验证方法必须使用“表单、字段”签名进行定义,这意味着您不能使用带有(自我、大学、电子邮件)参数的验证器 但是,您可以通过表单参数访问验证程序中表单的其他字段:
def validate_university(form, university): # <- correct signature
uni = University.query.filter_by(code=university.data).first()
email = form.email # <- access the email field like so
....
def validate_大学(表单,大学):#这已经奏效了。非常感谢。我会对你的评论投赞成票,但我还没有足够的声誉这么做!