您的位置:首页 > 其它

Flask学习笔记 评论部分第二部分

2017-08-19 16:32 225 查看
接第一部分,这次主要介绍如何实现管理员管理评论的功能。

具体逻辑如下:在某个页面显示所有的评论,这个页面需要有权限的用户才能访问。创建一个disable按钮,点击按钮可以改变评论的disabled属性,根据disabled属性的True或者False来控制是否禁用评论。

看到这里脑海中已经有些东西浮现上来了:首先用一个视图函数和一个模板来呈现所有的评论,其中可以加一个分页功能。然后再用两个视图函数(一个显示,一个不显示)来决定是否显示评论,并在评论中增加一个按钮来指向这两个个视图函数。当然,以上这些功能在执行以前都要对用户的身份进行检查。

想完这些之后就要开始写代码了,首先是在某页面中显示所有评论。

@main.route('/moderate')
@login_required  #感觉这句有点多余
@permission_required(Permission.MODERATE_COMMENTS)
def moderate():
page = request.args.get('page',1,type=int)
pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=20,error_out=False)
comments = pagination.items
return render_template('moderate.html',comments=comments,pagination=pagination,page=page)


一个很常见的分页视图函数,渲染方式和之前的方法大同小异,唯一不同的地方就是加入了disable和enable按钮,并且被禁用的评论的显示。

还有一点要说一下,我们之前在comment部分中曾经使用过_comments.html这种模块化的模板,这个模板本身是不限制用户身份的,如果我们在这个模板中添加disable和enable按钮,直接将其应用在我们的moderate视图函数中。普通用户在评论页面也会看到disable和enable按钮(虽然他们无法使用这个功能),这是不合适的。但是我们又想省劲,不想再写一个显示评论的模板来实现我们的功能,所以我们这里再设置一个变量moderate来控制这个过程。

首先在moderate.html中加这么一句:

{% set moderate=True %}


然后在_comments.html中的for循环里添加按钮功能:

...
{% if moderate %}
{% if comment.disbled %}
<a class="btn btn-default btn-xs" href={{ url_for('main.moderate_enable',id=comment.id,page=page) }}>Enable</a>
{% else %}
<a class="btn btn-default btn-xs" href={{ url_for('main.moderate_disable',id=comment.id,page=page) }}>Enable</a>
{% endif %}
{% endif %}


逻辑:已被禁用的评论就显示enable按钮(解禁),反之同理。

然后再在_comments.html中在评论内容的部分(div class=”comment-body”)进行一个逻辑控制:

{% if comment.
a229
disabled %}
<p><i>该评论已被删除</i></p>
{% endif %}
{% if moderate or not comment.disabled %}
{% if comment.body_html %}
{{ comment.body_html | safe }}
{% else %}
{{ comment.body }}
{% endif %}
{% endif %}


最后就是禁用和解禁功能(disable,enable)所对应的视图函数啦:

@main.route('/moderate/enable/<int:id>')
@login_required
@permission_required(Permission.MODERATE_COMMENTS)
def moderate_enable(id):
comment = Comment.query.get_or_404(id)
comment.disabled = False
db.session.add(comment)
return redirect(url_for('main.moderate',page=request.args.get('page',1,type=int)))


这个也没什么好解释的,就是通过id抓到目标评论→修改评论的disabled值→更新数据库→返回文章所在的页(page)。

评论部分也结束了,接下来就是补一下之前的内容。

狗书里下一章是rest相关的一些东西,还是不太理解,感觉需要点项目练练。话说有大神带我做项目么。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: