2017-12-28 8 views
0

Ich habe viele Themen hier auf SO gefunden, die damit zusammenhängen, aber keiner von ihnen hilft, das Problem zu lösen, vor dem ich stehe. Ich verstehe, dass in meinem Code irgendwo eine Funktion erwartet wird, aber es stattdessen Zeichenfolge erhält.TypeError: 'str' ist nicht aufrufbar (Flask form validation)

Relevante Code:

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. 

Irgendwelche Gedanken darüber, warum ich diesen Fehler bin immer? Daran habe ich stundenlang festgemacht.

Antwort

0

Die Linie

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

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

Etikett das erste Argument sein sollte, ist das zweite Argument der Validator. Ihr Code übergibt 'Select Country' als Validierer, was offensichtlich fehlschlägt.

+0

Nun ... Ich habe es behoben und ich habe neue Fehler, aber es ist zumindest etwas, das ich reparieren kann. Flask ist großartig, aber macht keinen guten Job, um genau zu sagen, wo der Fehler liegt. Danke für die Überprüfung meines Codes @notenness –

+0

@MarkAlexa Gern geschehen! :) – noteness

Verwandte Themen