13.2 管理评论

2023-12-26 00:18
文章标签 管理 评论 13.2

本文主要是介绍13.2 管理评论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节我们为Web程序实现管理评论的功能。

我们的大体思路如下:

  1. 如果登录的用户有管理评论的权限, 在导航栏显示一个管理评论的导航。
  2. 点击导航, 路由函数moderate进行处理, 返回moderate.html页面
  3. 页面内容包括标题, 评论, 页面导航。
  4. 并且在_comments.html里为每条评论添加两个标签enable和disable控制评论的显示与否。
  5. 由路由moderate_enable和moderate_disable处理评论的显示与否

一. 在base.html里添加导航

{% if current_user.can(Permission.MODERATE_COMMENTS) %}<li><a href="{{ url_for('main.moderate') }}">Moderate Comment</a></li>{% endif %}

二. moderate路由

@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=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False)comments = pagination.itemsreturn render_template('moderate.html', comments=comments, pagination=pagination, page=page)

注意, 路由函数中把page参数传进了moderate模板中, 后面我们会解释这样做的原因。

三. moderate.html

{% extends 'base.html' %}
{% import '_macros.html' as macros %}{% block title %}Flasky - Comment Moderation{% endblock %}{% block page_content %}
<div class="page-header">
<h1>Comment Moderation</h1>
</div>
{% set moderate = True %}
{% include '_comments.html' %}
{% if pagination %}
<div class="pagination" >
{{ macros.pagination_widget(pagination, 'main.moderate')}}
</div>
{% endif %}
{% endblock %}

四. _comments.html

<ul class="comments">{% for comment in comments%}<li class="comment"><div class="comment-thumbnail"><a href="{{ url_for('main.user', username=comment.author.username)}}"><img class="img-rounded profile-thumbnail" src="{{ comment.author.gravatar(size=40) }}"></a></div><div class="comment-content"><div class="comment-date">{{ moment(comment.timestamp).fromNow() }}</div><div class="comment-author"><a href="{{ url_for('main.user', username=comment.author.username )}}">{{ comment.author.username }}</a></div><div class="comment-body">{% if comment.disabled %}<p><i>This comment has been disabled by a moderator.</i></p>{% endif %}{% if moderate or not comment.disabled %}{% if comment.body_html %}{{ comment.body_html }}{% else %}{{ comment.body }}{% endif %}{% endif %}</div>{% if moderate %}{% if comment.disabled %}<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-danger btn-xs" href="{{ url_for('main.moderate_disable', id=comment.id, page=page)}}">Disable</a> {% endif %}{% endif %}</div></li>{% endfor %}
</ul>

其实到此为止, 我们就能解释前面那个问题了, 我们把page参数传到moderate.html里面, 是因为moderate页面中的每条评论都有enable和disable链接, 他们对应的路由会设置comment的disabled的值, 然后重定向到当前页page。

五.moderate_enable和moderate_disable路由函数:

@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 = Falsedb.session.add(comment)return redirect(url_for('.moderate', page=request.args.get('page', 1, type=int)))@main.route('/moderate/disable/<int:id>')
@login_required
@permission_required(Permission.MODERATE_COMMENTS)
def moderate_disable(id):comment = Comment.query.get_or_404(id)comment.disabled = Truedb.session.add(comment)return redirect(url_for('.moderate', page=request.args.get('page', 1, type=int)))

六. 效果演示





这篇关于13.2 管理评论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537473

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

逆向学习汇编篇:内存管理与寻址方式

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/3ceeb9ae6d98​​ 在汇编语言的世界中,内存管理和寻址方式是构建程序的基础。理解这些概念不仅对于编写高效的汇编代码至关重要,也是进行逆向工程分析的关键技能。本文将深入探讨内存管理的基本原则和多种寻址方式,并通过代码案例来展示它们的实际应用。 1. 内存管理 内存管理涉及如何分配

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

Yarn:引领JavaScript包管理新潮流

在浩瀚的JavaScript世界中,包管理工具如同一位精明的管家,帮助开发者管理着各式各样的代码包。而Yarn,这位新晋管家,以其高效、稳定和安全的特性,正逐渐成为开发者心中的新宠。本文将带您走进Yarn的世界,让您轻松掌握Yarn的强大特性和使用方法。 特性一:快速如闪电         想象一下,你是一位忙碌的图书馆管理员,每天需要整理成千上万的书籍。如果每本书的摆放都

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

Netty ByteBuf 释放详解:内存管理与最佳实践

Netty ByteBuf 释放详解:内存管理与最佳实践 在Netty中(学习netty请参考:🔗深入浅出Netty:高性能网络应用框架的原理与实践),管理ByteBuf的内存是至关重要的(学习ByteBuf请参考:🔗Netty ByteBuf 详解:高性能数据缓冲区的全面介绍)。未能正确释放ByteBuf可能会导致内存泄漏,进而影响应用的性能和稳定性。本文将详细介绍如何正确地释放ByteB

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器,它是Apache基金会的Jakarta 项目中的一个核心项目,由Apache, Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 在Tomcat中,应用程序的成部署很简