问题出现的环境背景及自己尝试过哪些方法
角色验证出现问题,角色验证代码current_user.can(Permission.WRITE_ARTICLES) and
删去网站能够运行,但是角色验证依然失效。
相关代码
models部分代码:
def can(self, permissions):
return self.role is not None and (self.role.permissions & permissions)
== permissions
def is_administrator(self):
return self.can(Permission.ADMINISTER)
def __repr__(self):
return '<User %r>' % self.username
class AnonymousUser(AnonymousUserMixin):
def can(self, permissions):
return False
def is_administrator(self):
return False
login_manager.anonymous_user = AnonymousUser
视图函数部分代码:
@main.route('/', methods=['GET', 'POST'])
def index():
form = PostForm()
if current_user.can(Permission.WRITE_ARTICLES) and form.validate_on_submit():
post = Post(body=form.body.data,
author=current_user._get_current_object())
db.session.add(post)
db.session.commit()
return redirect(url_for('.index'))
page = request.args.get('page', 1, type=int)
show_followed = False
if current_user.is_authenticated:
show_followed = bool(request.cookies.get('show_followed', ''))
if show_followed:
query = current_user.followed_posts
else:
query = Post.query
pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page, per_page=current_app.config['FLASKY_POSTS_PER_PAGE'],error_out=False)
posts = pagination.items
return render_template('index.html', form=form, posts=posts, show_followed=show_followed, pagination=pagination,current_time=dateti
测试部分代码(测试能够通过):
def test_user_role(self):
u = User(email='john@example.com', password='cat')
self.assertTrue(u.can(Permission.FOLLOW))
self.assertTrue(u.can(Permission.COMMENT))
self.assertTrue(u.can(Permission.WRITE_ARTICLES))
flask 运行未登录主页就出现AttributeError: 'AnonymousUserMixin' object has no attribute 'can'
,如果登录进入u.can()
角色验证函数失效主页中有以下代码:
{% if current_user.can(Permission.WRITE) %}{{ wtf.quick_form(form) }}{% endif %}
但是没起作用