这是我登录表格的烧瓶形式。它不喜欢同时需要大学表单字段和电子邮件表单字段的这种验证-我不断收到的错误是
TypeError:validate_university()缺少1个必需的位置参数:“电子邮件”
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.'))
这是对应的路线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)
我该如何解决?为什么不允许我为大学确认书提供两个位置论点? 谢谢
答案 0 :(得分:1)
必须使用“表单,字段”签名定义常规验证方法,这意味着您不能使用带有(self,university,email)参数的验证器。
但是,您可以通过form参数访问验证器中表单的其他字段:
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
....