Python 烧瓶形式验证

Python 烧瓶形式验证,python,flask,Python,Flask,这是我的登录表格。它不喜欢这种既需要大学表单字段又需要电子邮件表单字段的验证——我不断得到的错误是 TypeError:validate_university()缺少1个必需的位置参数:“email” class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', val

这是我的登录表格。它不喜欢这种既需要大学表单字段又需要电子邮件表单字段的验证——我不断得到的错误是

TypeError:validate_university()缺少1个必需的位置参数:“email”

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_大学(表单,大学):#这已经奏效了。非常感谢。我会对你的评论投赞成票,但我还没有足够的声誉这么做!