python - AttributeError:类型对象“用户”没有属性“获取”
问题描述
我正在尝试运行我的 Flask 应用程序,但我不断收到以下错误:
AttributeError: type object 'User' has no attribute 'get'
我假设它来自我的 Models.py 代码:
class User(db.Model):
__tablename__ = 'users'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key = True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
password = db.Column(db.String(128))
confirmed = db.Column(db.Boolean, default=False)
#posts = db.relationship('Post', lazy='dynamic')
def is_active(self):
return True
def get_id(self):
return self.email
def is_authenticated(self):
return self.authenticated
def is_anonymous(self):
return False
@login_manager.user_loader
def load_user(userid):
return User.get(User.id==userid)
在玩了之后,看起来我可能需要以下代码块或某个地方的变体?:
def get_object(self):
return self.request.user
或者某种类型的衍生物。任何帮助将不胜感激。谢谢!
这是完整的回溯:
form = PostForm()
[2018-07-06 11:08:23,652] ERROR in app: Exception on /index [GET]
Traceback (most recent call last):
File
"/Users.../sqlalchemy/sql/elements.py", line 682, in __getattr__
return getattr(self.comparator, key)
AttributeError: 'Comparator' object has no attribute 'request'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/...python3.6/site-packages/flask/app.py", line 2292, in
wsgi_app
response = self.full_dispatch_request()
File "/Users/...b/python3.6/site-packages/flask/app.py", line 1815, in
full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/...python3.6/site-packages/flask/app.py", line 1718, in
handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users//python3.6/site-packages/flask/_compat.py", line 35, in
reraise
raise value
File "/Users/...python3.6/site-packages/flask/app.py", line 1813, in
full_dispatch_request
rv = self.dispatch_request()
File "/Users/WilliamStevens//site-packages/flask/app.py", line 1799, in
dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users//Documents/deplorable_snowflake/.../views.py", line 52, in
index
return render_template('frontpage.html', form=form, posts=posts)
File "/Users/.../python3.6/site-packages/flask/templating.py", line 133,
in render_template
ctx.app.update_template_context(context)
File "/Users/W/python3.6/site-packages/flask/app.py", line 792, in
update_template_context
context.update(func())
File "/Users/.../flask_login/utils.py", line 368, in
_user_context_processor
return dict(current_user=_get_user())
File "/Users/.../python3.6/site-packages/flask_login/utils.py", line
335,
in _get_user
current_app.login_manager._load_user()
File "/Users/.../python3.6/site-
packages/flask_login/login_manager.py",
line 359, in _load_user
return self.reload_user()
File "/Users/.../lib/python3.6/site-
packages/flask_login/login_manager.py", line 321, in reload_user
user = self.user_callback(user_id)
File
"/Users/.../models.py", line 53, in load_user
return User.get(User.id==userid)
File
"/Users/WilliamStevens/.../models.py", line 47, in get
return self.request.user
File "/Users/...site-packages/sqlalchemy/sql/elements.py", line 688,
in
__getattr__
key)
AttributeError: Neither 'BinaryExpression' object nor 'Comparator'
object has an attribute 'request'
解决方案
我刚遇到这个问题。shmee 提出的解决方案对我有用:
- 该
load_user()
函数不应该是User
类的一部分,而是它自己的独立函数。 - 该
load_user()
函数应该调用User.query.get(user_id)
,而不是User.get(user_id)
.- 我认为这种混淆来自于 Flask-Login 的文档从今天开始采用后一种方式:
return User.get(user_id)
.
- 我认为这种混淆来自于 Flask-Login 的文档从今天开始采用后一种方式:
示例代码:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(80))
def __repr__(self):
return '<User %r>' % self.username
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
推荐阅读
- firebase - 删除 SwiftUI 后 Firebase Firestore 不更新 UI
- database - 如果名称在 Laravel 中重复,如何添加数量?
- c++ - DLL 函数参数类型不完整导致结果不正确
- node.js - Kubernetes 多容器通信
- android - 如何在android中将顶部手柄添加到底部?
- angular - 根据从 Angular 中的订阅返回的数据为变量赋值。(可能吗 ?)
- php - 我的 PHP MYSQL 查询未以 HTML 格式返回所有结果 - 需要显示演出表内容的完整历史记录,仅显示部分内容
- php - 换行符分隔的 fwrite() 是否可以在 PHP 中的 SIGINT/SIGKILL 中截断一行?
- arduino - 处理 IDE - 双击不同条件的按钮
- css - React-Native:滚动视图不尊重证明内容?