TypeError:'str'不可调用(Flask表单验证)

时间:2017-12-28 11:56:33

标签: python typeerror flask-wtforms

我在这里发现了许多与此相关的主题,但是它们都没有帮助解决我面临的问题。我明白在我的代码中,某个地方是一个预期的函数,但它会改为字符串。

相关代码:

class UserRegistrationForm(Form):
    photo = FileField('', validators=[DataRequired()])
    country = SelectField('','Select Country', choices=countries)
    first_name = StringField('',[validators.Length(min=1,max=20), DataRequired()])
    middle_name = StringField('',[validators.Length(min=1,max=20), DataRequired()])
    last_name = StringField('',[validators.Length(min=1,max=20), DataRequired()])
    dob = DateField('',format='YYYY-MM-DD', validators=[DataRequired()])
    address = TextAreaField('', validators=[DataRequired()])
    email = EmailField('', validators=[DataRequired(), Email()])
    mobile_number = StringField('', validators=[DataRequired()])
    password = PasswordField('', validators=[DataRequired()])

@app.route('/signup', methods=['GET', 'POST'])
def signup():
    form = UserRegistrationForm(request.form)
    if request.method == 'POST' and form.validate():  # here's where the error is coming from

    file_name = request.files.getlist('photo')
    if file_name[-4:] not in ALLOWED_EXTENSIONS:
        flash('Invalid Image Type.')

    else:
        file_name = file_name.filename
        destination = '/'.join([TARGET, file_name])
        file_name.save(destination)

        country = form.country.data
        first_name = form.first_name.data
        middle_name = form.middle_name.data
        last_name = form.last_name.data
        dob = form.dob.data
        address = form.address.data
        email = form.email.data
        mobile_number = form.mobile_number.data
        password = sha256_crypt.encrypt(str(form.password.data))  # according to tutorial the string conversion here is correct.

有关为什么我收到此错误的任何想法?已经坚持了几个小时。

1 个答案:

答案 0 :(得分:0)

该行

    country = SelectField('','Select Country', choices=countries)

应该是

    country = SelectField('Select Country', choices=countries)

Label应该是第一个参数,第二个参数是验证器。您的代码正在传递'Select Country'作为验证程序,这显然会失败。