2017-03-25 25 views
0

モーニングフェラス!TypeError: 'RegistrationForm'オブジェクトは呼び出し可能ではありません

私はFlaskフォームでいくつかの問題に直面しています。ここでは、コード(python2.7)である:

views.py

# third-parties imports 
    from flask import flash, redirect, render_template, url_for 
    from flask_login import login_required, login_user, logout_user 

    # local imports 
    from . import auth 
    from forms import LoginForm, RegistrationForm 
    from .. import db 
    from ..models import Empregado 

    @auth.route('/register', methods=['GET', 'POST']) 
    def register(): 
     form = RegistrationForm() 
     if form.validate_on_submit(): 
      empr = Empregado(email=form.email.data, 
        username=form.username.data, 
        first_name=form.first_name.data, 
        last_name=form.last_name.data, 
        password=form.password.data) 
      db.session.add(empr) 
      db.session.commit() 
      flash('Registration complete! Go ahead and Login!') 

      # done registration. Heads for login 
      return redirect(url_for('auth.login')) 

     # When FLASK_DEBUG = 1, it yells a TypeError on the following line 
     return render_template('auth/register.html', form=form('utf8'), title='Register') 

forms.py

Altough RegistrationFormを呼び出すことはできません、LoginFormはAUTH/login.htmlと上にレンダリングされます、上のコードスニペットはauth/register.htmlのエラーにのみ焦点を当てます。

# -*- coding: utf-8 -*- 

# app/auth/forms.py 

from flask_wtf import FlaskForm 
from wtforms import PasswordField, StringField, SubmitField, ValidationError 
from wtforms.validators import DataRequired, Email, EqualTo 
from ..models import Empregado 

class RegistrationForm(FlaskForm): 

    email = StringField('Email', validators=[DataRequired(), Email()]) 
    username = StringField('User', validators=[DataRequired()]) 
    first_name = StringField('First name', validators=[DataRequired()]) 
    last_name = StringField('Last name', validators=[DataRequired()]) 
    password = PasswordField('Password', validators=[DataRequired(), EqualTo('retype')]) 
    retype = PasswordField('Retype Password') 
    submit = SubmitField('submit') 

def validate_email(self, field): 
    if Empregado.query.filter_by(email=field.data).first(): 
     raise ValidationError('Email already used') 

def validate_username(self, field): 
    if Empregado.query.filter_by(username=field.data).first(): 
     raise ValidationError('User already exists') 

class LoginForm(FlaskForm): 

    email = StringField('Email', validators=[DataRequired(), Email()]) 
    password = PasswordField('Password', validators=[DataRequired()]) 
    submit = SubmitField('Login') 

トレースバック

File "~/Sources/py2/business_masters/app/auth/views.py", line 40, in register 

return render_template('auth/register.html', form=form('utf8'), title='Register') 

TypeError: 'RegistrationForm' object is not callable 

私はタイプミスやディレクトリのためにダブルチェックしましたが、すべてが細かいようだが...私は、この(私の最初のウェブサイト上でこだわっているので、この貧しい人々にハード行かないでください。 dev ...)。私はあなたの理解と時間をありがとう!

+0

あなたの 'RegistrationForm'パートを追加してください。 – McGrady

+0

なぜ 'form = form'だけでなく、' form = form( 'utf8') 'をやっているのですか? – bernie

+0

私はUnicodeDecodeエラーを叫ぶので...私はpython2.7のデフォルトのエンコーディングは 'ascii'だと信じています –

答えて

0

form=form('utf8')これは、クラスオブジェクトをインスタンスではなくformに渡すことを意味します。

return render_template('register.html', form=form)を使用してください。ここで

は一例であり、あなたのコードをチェックアウトして、あなたのRegistrationFormと比較:

from wtforms import Form, StringField, validators 

class RegistrationForm(Form): 
    username = StringField('Username', [validators.Length(min=4, max=25)]) 
    email = StringField('Email Address', [validators.Length(min=6, max=35)]) 

@app.route('/register', methods=['GET', 'POST']) 
def register(): 
    form = RegistrationForm() 

    if request.method == 'POST' and form.validate(): 
     user = User(form.username.data, form.email.data, 
        form.password.data) 
     db_session.add(user) 
     flash('Thanks for registering') 
     return redirect(url_for('login')) 
    return render_template('register.html', form=form) 

register.html:

<form class="form form-horizontal" method="post" role="form"> 
    {{ form1.hidden_tag() }} 
    {{ wtf.form_errors(form1, hiddens="only") }} 
    {{ wtf.form_field(form1.email,form_type="horizontal") }} 
    {{ wtf.form_field(form1.username,form_type="horizontal") }} 
    {{ wtf.form_field(form1.first_name,form_type="horizontal") }} 
    {{ wtf.form_field(form1.last_name,form_type="horizontal") }} 

    <div class="col-sm-offset-2 col-sm-10"> 
    <button name="action_save1" type="submit" class="btn btn-primary">submit</button> 
    </div> 
</form> 

Form Validation with WTFormsから詳細をご覧ください。

+0

ありがとう!私は結果を比較し、共有します! –

+0

@ G.BossNoobware UnicodeDecodeエラーを回避し、 'form = form( 'utf8')'を 'form = form'に変更するには、' import sys reload(sys) sys.setdefaultencoding( 'utf-8') ' – McGrady

+0

@ G.BossNoobwareあなたは単に 'form = RegistrationForm()'を使用することができます – McGrady

関連する問題