0
最近我正在學習瓶,並且有一個bug困惑我2天:
當我試着使用login_user
登錄的,它提出了TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
的User
在models.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'))
該Loginform
在forms.py
:
class LoginForm(FlaskForm):
email = StringField('郵箱', validators=[DataRequired(), Length(1, 64), Email])
password = PasswordField('密碼', validators=[DataRequired()])
remember_me = BooleanField('記住我')
submit = SubmitField('登陸')
的/login
在views.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
爲什麼要在'object'?這就是Python如何描述類,它有什麼問題?但請顯示您收到的完整錯誤和追溯。 –
所有的python對象都是對象的子類(除了那些顯式地不聲明超類的東西,但這很少見,也不是很好的形式)。請發佈完整的錯誤和回溯,以便我們可以看到實際導致錯誤的方法。 –
你有一個User對象的實例,它的類型是一個類。問題在哪裏,以及如何阻止你前進? –