Python 类型错误:';登记表';对象不可调用

Python 类型错误:';登记表';对象不可调用,python,Python,早上好,伙计们 我在烧瓶表格上遇到了一些麻烦。下面是代码(python2.7): 视图.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

早上好,伙计们

我在烧瓶表格上遇到了一些麻烦。下面是代码(python2.7):

视图.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

    # 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')
尽管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
我仔细检查了打字错误和目录,但一切似乎都很好。。。我被困在这个(我的第一个网站,所以请不要对这个可怜的开发人员太苛刻了…)。我感谢你们的理解和时间,伙计们

form=form('utf8')
这意味着您正在将对象传递给
form
而不是实例

尝试使用
returnrender\u模板('register.html',form=form)

下面是一个示例,请检查您的代码并与您的
注册表进行比较:

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>

{{form1.hidden_tag()}}
{{wtf.form_errors(form1,hiddens=“only”)}
{{wtf.form_字段(form1.email,form_type=“horizontal”)}
{{wtf.form_字段(form1.username,form_type=“horizontal”)}
{{wtf.form_字段(form1.first_name,form_type=“horizontal”)}
{{wtf.form_字段(form1.last_name,form_type=“horizontal”)}
提交

查看。

中的更多详细信息。请添加您的
注册表单
部分。您为什么要执行
form=form('utf8')
,而不仅仅是
form=form
?因为如果我不。。。我相信python2.7的默认编码是“ascii”,谢谢!我会比较和分享结果@G.BossNoobware您可以使用
import sys reload(sys)sys.setdefaultencoding('utf-8')
来避免UnicodeCode错误,并将
form=form('utf8')
更改为
form=form
@G.BossNoobware您可以使用
form=RegistrationForm()
即使导入所有内容,错误仍然存在,回溯:'RegistrationForm'是不可调用的-老实说,我被这个错误困扰了三天。@G.BossNoobware
return render_template('auth/register.html',form=form,title='register')
它对我有效。
form=form('utf-8')
表示你在传递一个类对象,
form=form
传递一个实例。