2016-11-17 55 views
0

最近我正在学习瓶,并且有一个bug困惑我2天:
当我试着使用login_user登录的,它提出了TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Usermodels.py
为什么期望的实例“用户”是一个类?

class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(140), unique=True, index=True) 
    username = db.Column(db.String(80), unique=True, index=True) 
    password_hash = db.Column(db.String(128)) 
    confirmed = db.Column(db.Boolean, default=False) 
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) 


Loginformforms.py

class LoginForm(FlaskForm): 
    email = StringField('邮箱', validators=[DataRequired(), Length(1, 64), Email]) 
    password = PasswordField('密码', validators=[DataRequired()]) 
    remember_me = BooleanField('记住我') 
    submit = SubmitField('登陆') 


/loginviews.py

@auth.route('/login', methods=['GET', 'POST']) 
def login(): 
    form = LoginForm() 
    if form.validate_on_submit(): 
     user = User.query.filter_by(email=form.email.data).first() 
     if user is not None and user.verify_password(form.password.data): 
      login_user(user, remember=form.remember_me.data) 
      return redirect(request.args.get('next') or url_for('main.index')) 
     flash('用户名或密码错误') 
    return render_template('auth/login.html', form=form) 


flask_login观看的login_user源代码后,我得到的位置参数user应该是一个object,所以我跑python manage.py shell,但我得到了那些:

>>> user = User(username='aaa') 
>>> type(user) 
<class 'app.models.User'> 
>>> user = User.query.filter_by(email='[email protected]').first() 
>>> user 
<User 'Arszrc'> 
>>> type(user) 
<class 'app.models.User'> 

是否有任何人谁WOU ld告诉我为什么user的类型是class而不是object

错误:

Traceback (most recent call last): 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 2000, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1991, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1567, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1641, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1544, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1639, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask/app.py", line 1625, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/Arszrc/PycharmProjects/Flasky/app/auth/views.py", line 15, in login 
    if form.validate_on_submit(): 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/flask_wtf/form.py", line 161, in validate_on_submit 
    return self.is_submitted() and self.validate() 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/wtforms/form.py", line 310, in validate 
    return super(Form, self).validate(extra) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/wtforms/form.py", line 152, in validate 
    if not field.validate(self, extra): 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/wtforms/fields/core.py", line 204, in validate 
    stop_validation = self._run_validation_chain(form, chain) 
    File "/Users/Arszrc/PycharmProjects/PyFlask3.5/lib/python3.5/site-packages/wtforms/fields/core.py", line 224, in _run_validation_chain 
    validator(form, self) 
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given 
+2

为什么要在'object'?这就是Python如何描述类,它有什么问题?但请显示您收到的完整错误和追溯。 –

+1

所有的python对象都是对象的子类(除了那些显式地不声明超类的东西,但这很少见,也不是很好的形式)。请发布完整的错误和回溯,以便我们可以看到实际导致错误的方法。 –

+0

你有一个User对象的实例,它的类型是一个类。问题在哪里,以及如何阻止你前进? –

回答

1

尝试调用Email验证通过Email()

class LoginForm(FlaskForm): 
    email = StringField('邮箱', validators=[DataRequired(), Length(1, 64), Email()]) 
相关问题