flask-admin: 当前用户 return none 在 flask admin 中从 ModelView 继承的 class 中使用时
flask-admin: current user return none when used in a class inherited from ModelView in flask admin
当我通过从 flask_admin.contrib.sqla 继承 ModelView class 并在我自己的 class 名称 UserDeleteView 中创建自己的模型视图时,我有一个关于 flask_admin 的错误,当我在 UserDeleteView 中使用 current_user(flask_login 的变量)它给出 None 但是当我在 UserDeleteView 的任何函数中使用它时它工作正常
就像我在 UserDeleteView 的 is_accessable 函数中使用它时 class 它有效,但是当我在 UserDeleteView class 的 if 中使用它时它不起作用
这是我的 flask_admin 代码:-
class UserDeleteView(ModelView):
def is_accessible(self):
return "User" in {i.split()[0] for i in current_user.permissions() }
if "User w" not in current_user.permissions():
can_delete=False
class PostVarificationView(BaseView):
@expose("/")
def index(self):
return self.render('admin/post_varification.html')
class MyAdminIndexView(AdminIndexView):
def is_accessible(self):
return (current_user.is_authenticated and len(current_user.permissions())!=0)
admin = Admin(app,index_view=MyAdminIndexView(),name="Microblog")
admin.add_view(UserDeleteView( User, db.session ))
admin.add_view(PostVarificationView(name="Post Varification",endpoint="PostVarification"))
这是我得到的错误:
AttributeError: 'NoneType' object has no attribute 'permissions'
Traceback (most recent call last)
File "/home/chirag/Documents/Projects/microblog1/microblog.py", line 1, in <module>
from app import app,db
File "/home/chirag/Documents/Projects/microblog1/app/__init__.py", line 21, in <module>
from app import routes, models, errors
File "/home/chirag/Documents/Projects/microblog1/app/routes.py", line 309, in <module>
class UserDeleteView(ModelView):
File "/home/chirag/Documents/Projects/microblog1/app/routes.py", line 314, in UserDeleteView
if "User w" not in current_user.permissions():
File "/home/chirag/Documents/Project venv/microblog1/lib/python3.7/site-packages/werkzeug/local.py", line 348, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: 'NoneType' object has no attribute 'permissions'
class 主体中定义的代码在首次导入模块时执行,没有 current_user
因此出现错误。请参阅此 SO 问题 "Why does a class' body get executed at definition time?" 以进一步阅读。
将can_delete
替换为方法,并用@[=24=修饰],即可得到current_user
示例:
class UserDeleteView(ModelView):
def is_accessible(self):
return "User" in {i.split()[0] for i in current_user.permissions() }
@property
def can_delete(self):
# Your logic here
return "User w" in current_user.permissions()
当我通过从 flask_admin.contrib.sqla 继承 ModelView class 并在我自己的 class 名称 UserDeleteView 中创建自己的模型视图时,我有一个关于 flask_admin 的错误,当我在 UserDeleteView 中使用 current_user(flask_login 的变量)它给出 None 但是当我在 UserDeleteView 的任何函数中使用它时它工作正常
就像我在 UserDeleteView 的 is_accessable 函数中使用它时 class 它有效,但是当我在 UserDeleteView class 的 if 中使用它时它不起作用
这是我的 flask_admin 代码:-
class UserDeleteView(ModelView):
def is_accessible(self):
return "User" in {i.split()[0] for i in current_user.permissions() }
if "User w" not in current_user.permissions():
can_delete=False
class PostVarificationView(BaseView):
@expose("/")
def index(self):
return self.render('admin/post_varification.html')
class MyAdminIndexView(AdminIndexView):
def is_accessible(self):
return (current_user.is_authenticated and len(current_user.permissions())!=0)
admin = Admin(app,index_view=MyAdminIndexView(),name="Microblog")
admin.add_view(UserDeleteView( User, db.session ))
admin.add_view(PostVarificationView(name="Post Varification",endpoint="PostVarification"))
这是我得到的错误:
AttributeError: 'NoneType' object has no attribute 'permissions'
Traceback (most recent call last)
File "/home/chirag/Documents/Projects/microblog1/microblog.py", line 1, in <module>
from app import app,db
File "/home/chirag/Documents/Projects/microblog1/app/__init__.py", line 21, in <module>
from app import routes, models, errors
File "/home/chirag/Documents/Projects/microblog1/app/routes.py", line 309, in <module>
class UserDeleteView(ModelView):
File "/home/chirag/Documents/Projects/microblog1/app/routes.py", line 314, in UserDeleteView
if "User w" not in current_user.permissions():
File "/home/chirag/Documents/Project venv/microblog1/lib/python3.7/site-packages/werkzeug/local.py", line 348, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: 'NoneType' object has no attribute 'permissions'
class 主体中定义的代码在首次导入模块时执行,没有 current_user
因此出现错误。请参阅此 SO 问题 "Why does a class' body get executed at definition time?" 以进一步阅读。
将can_delete
替换为方法,并用@[=24=修饰],即可得到current_user
示例:
class UserDeleteView(ModelView):
def is_accessible(self):
return "User" in {i.split()[0] for i in current_user.permissions() }
@property
def can_delete(self):
# Your logic here
return "User w" in current_user.permissions()