利用Flask搭建微电影视频网站(九):会员和评论管理
关于博主
努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!
微信公众号: 啃饼思录
QQ: 2810706745(啃饼小白)
写在前面
本篇笔记,我们介绍会员和评论管理,这个和前面介绍的标签,电影,预告管理差不多,所以我就加快速度,话不多说,开始学习吧。
本篇笔记对应上传的仓库为:https://github.com/licheetools/movie对应第九篇。
会员管理
使用到的内容
我们将使用到的内容有:
模型:User
表单: 无 (这个不涉及到表单的提交)
请求方法: GET ,POST
访问控制: @admin_login_req
插入一些数据
为了后续开发的必要,我们来在数据库里,插入一些数据:在终端输入cmd
,然后输入mysql -uroot -proot
后回车,接着use movie;
然后查询一下user的信息:select * from user;
接着复制粘贴下面的代码:
# 会员列表
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('红','1001','1001@128.com','18888888881','红','01.png','d32a72bdac524478b7e4f6dfc8394fe0',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('蓝','1002','1002@128.com','18888888882','蓝','02.png','d32a72bdac524478b7e4f6dfc8394fe1',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('绿','1003','1003@128.com','18888888883','绿','03.png','d32a72bdac524478b7e4f6dfc8394fe2',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('白','1004','1004@128.com','18888888884','白','04.png','d32a72bdac524478b7e4f6dfc8394fe3',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('紫','1005','1005@128.com','18888888885','紫','05.png','d32a72bdac524478b7e4f6dfc8394fe4',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('黄','1006','1006@128.com','18888888886','黄','06.png','d32a72bdac524478b7e4f6dfc8394fe5',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('青','1007','1007@128.com','18888888887','青','07.png','d32a72bdac524478b7e4f6dfc8394fe6',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('橙','1008','1008@128.com','18888888888','橙','08.png','d32a72bdac524478b7e4f6dfc8394fe7',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('赤','1009','1009@128.com','18888888889','赤','09.png','d32a72bdac524478b7e4f6dfc8394fe8',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('靛','1010','1010@128.com','18888888891','靛','10.png','d32a72bdac524478b7e4f6dfc8394fe9',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('米','1011','1011@128.com','18888888892','米','11.png','d32a72bdac524478b7e4f6dfc8394ff0',now());
insert into user(name,pwd,email,phone,info,face,uuid,addtime) values('栗','1012','1012@128.com','18888888893','栗','12.png','d32a72bdac524478b7e4f6dfc8394ff1',now());
之后回车,然后再次查询一下我们的数据库:select * from user;
,看是不是这样的信息:
mysql> select * from user;
+----+------+------+--------------+-------------+------+--------+---------------------+----------------------------------+
| id | name | pwd | email | phone | info | face | addtime | uuid |
+----+------+------+--------------+-------------+------+--------+---------------------+----------------------------------+
| 1 | 红 | 1001 | 1001@128.com | 18888888881 | 红 | 01.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe0 |
| 2 | 蓝 | 1002 | 1002@128.com | 18888888882 | 蓝 | 02.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe1 |
| 3 | 绿 | 1003 | 1003@128.com | 18888888883 | 绿 | 03.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe2 |
| 4 | 白 | 1004 | 1004@128.com | 18888888884 | 白 | 04.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe3 |
| 5 | 紫 | 1005 | 1005@128.com | 18888888885 | 紫 | 05.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe4 |
| 6 | 黄 | 1006 | 1006@128.com | 18888888886 | 黄 | 06.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe5 |
| 7 | 青 | 1007 | 1007@128.com | 18888888887 | 青 | 07.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe6 |
| 8 | 橙 | 1008 | 1008@128.com | 18888888888 | 橙 | 08.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe7 |
| 9 | 赤 | 1009 | 1009@128.com | 18888888889 | 赤 | 09.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe8 |
| 10 | 靛 | 1010 | 1010@128.com | 18888888891 | 靛 | 10.png | 2018-08-10 19:18:05 | d32a72bdac524478b7e4f6dfc8394fe9 |
| 11 | 米 | 1011 | 1011@128.com | 18888888892 | 米 | 11.png | 2018-08-10 19:18:06 | d32a72bdac524478b7e4f6dfc8394ff0 |
| 12 | 栗 | 1012 | 1012@128.com | 18888888893 | 栗 | 12.png | 2018-08-10 19:18:10 | d32a72bdac524478b7e4f6dfc8394ff1 |
+----+------+------+--------------+-------------+------+--------+---------------------+----------------------------------+
12 rows in set (0.00 sec)
mysql>
当然你打开navicat在查询框里执行这段代码也是可以的,然后把图片都拷贝到uploads/users文件夹里面:
会员列表分页
打开views.py文件,我们修改会员列表函数:
from app.models import User
# 会员列表
@admin.route('/user/list/<int:page>/', methods=["GET"])
@admin_login_req
def user_list(page=None):
if page is None:
page = 1
# 查询的时候关联标签,采用join来加进去,多表关联用filter,过滤用filter_by
page_data = User.query.order_by(
User.addtime.desc()
).paginate(page=page, per_page=10)
return render_template("admin/user_list.html", page_data=page_data)
return render_template("admin/user_list.html")
接着去修改grid.html页面,修改gird中标签列表的url,为其添加参数page =1:
<a href="{{ url_for('admin.user_list', page=1) }}">
<i class="fa fa-circle-o"></i> 会员列表
</a>
然后打开user_list.htm页面,开始for循环的遍历:
然后就是分页功能了,我们参考之前在标签列表页面的配置,打开user_list.html:
<ul class="pagination pagination-sm no-margin pull-right">
<li><a href="#">首页</a></li>
<li><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">下一页</a></li>
<li><a href="#">尾页</a></li>
</ul>
去掉上面一段代码,我们在开头导入刚才的admin_page.html文件,然后开始调用:
{% import "ui/admin_page.html" as pg %}
将下面的代码填充你刚才删除的那段的位置:
{{ pg.page(page_data, "admin.user_list") }}
至此,关于会员列表的介绍就到此为止了!接下来是会员的查看!
会员的查看
打开views.py文件,我们修改user_view函数:
# 查看会员
@admin.route('/user/view/<int:id>', methods=["GET"])
@admin_login_req
def user_view(id=None):
user = User.query.get_or_404(int(id))
return render_template("admin/user_view.html", user=user)
接着打开user_view.html页面:
这样我们的查看功能就完成了,接下来是实现删除会员的操作了!
会员的删除
首先打开user_list.html页面,我们进行删除的跳转链接配置:
<a class="label label-danger" href="{{ url_for('admin.user_del', id =v.id) }}">删除</a>
接着就是打开views.py文件,定义我们的会员删除函数,我们可以仿照之前的电影删除或者是预告删除:
# 会员删除
@admin.route('/user/del/<int:id>', methods=["GET"])
@admin_login_req
def user_del(id=None):
user = User.query.get_or_404(int(id))
db.session.delete(user)
db.session.commit()
flash("会员删除成功!", "ok")
return redirect(url_for("admin.user_list", page=1))
然后打开user_list.html页面,我们添加删除成功的flash提示(同样可以复制我们的preview_list.html页面的那一部分):
然后去测试一下我们的项目,看一看关于会员列表的相关功能是否都已经实现了呢!
评论管理
使用到的内容
我们将使用到的内容有:
模型:Comment
表单: 无 (这个不涉及到表单的提交)
请求方法: GET (不涉及到信息的提交)
访问控制: @admin_login_req
插入一些数据
为了后续开发的必要,我们来在数据库里,插入一些数据:在终端输入cmd
,然后输入mysql -uroot -proot
后回车,接着use movie;
然后查询一下comment的信息:select * from comment;
接着复制粘贴下面的代码:(记住电影id要和你之前定义的电影id一样,因为是外键关联,当然也包括会员Id)
# 评论列表
insert into comment(movie_id,user_id,content,addtime) values(1,1,"好看",now());
insert into comment(movie_id,user_id,content,addtime) values(1,2,"不错",now());
insert into comment(movie_id,user_id,content,addtime) values(5,3,"经典",now());
insert into comment(movie_id,user_id,content,addtime) values(5,4,"给力",now());
insert into comment(movie_id,user_id,content,addtime) values(5,5,"精彩",now());
insert into comment(movie_id,user_id,content,addtime) values(1,6,"无聊",now());
insert into comment(movie_id,user_id,content,addtime) values(5,7,"乏味",now());
insert into comment(movie_id,user_id,content,addtime) values(1,8,"难看",now());
之后回车,然后再次查询一下我们的数据库:select * from comment;,看是不是这样的信息:
mysql> select * from comment;
+----+---------+----------+---------+---------------------+
| id | content | movie_id | user_id | addtime |
+----+---------+----------+---------+---------------------+
| 1 | 好看 | 1 | 1 | 2018-08-10 20:18:16 |
| 2 | 不错 | 1 | 2 | 2018-08-10 20:18:16 |
| 3 | 经典 | 5 | 3 | 2018-08-10 20:18:16 |
| 4 | 给力 | 5 | 4 | 2018-08-10 20:18:16 |
| 5 | 精彩 | 5 | 5 | 2018-08-10 20:18:16 |
| 6 | 无聊 | 1 | 6 | 2018-08-10 20:18:16 |
| 7 | 乏味 | 5 | 7 | 2018-08-10 20:18:16 |
| 8 | 难看 | 1 | 8 | 2018-08-10 20:18:18 |
+----+---------+----------+---------+---------------------+
8 rows in set (0.00 sec)
mysql>
接着打开views.py文件,我们修改评论列表函数:
# 评论列表
@admin.route('/comment/list/<int:page>/', methods=["GET"])
@admin_login_req
def comment_list(page=None):
if page is None:
page = 1
# 查询的时候关联标签,采用join来加进去,多表关联用filter,过滤用filter_by
page_data = Comment.query.join(
Movie
).join(
User
).filter(
Movie.id == Comment.movie_id,
User.id == Comment.user_id
).order_by(
Comment.addtime.desc()
).paginate(page=page, per_page=10)
return render_template("admin/comment_list.html", page_data=page_data)
接着去修改grid.html页面,修改gird中标签列表的url,为其添加参数page =1:
<a href="{{ url_for('admin.comment_list', page=1) }}">
<i class="fa fa-circle-o"></i> 评论列表
</a>
然后打开comment_list.htm页面,开始for循环的遍历:
然后就是分页功能了,我们参考之前在标签列表页面的配置,打开comment_list.html:
<ul class="pagination pagination-sm no-margin pull-right">
<li><a href="#">首页</a></li>
<li><a href="#">上一页</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">下一页</a></li>
<li><a href="#">尾页</a></li>
</ul>
去掉上面一段代码,我们在开头导入刚才的admin_page.html文件,然后开始调用:
{% import "ui/admin_page.html" as pg %}
将下面的代码填充你刚才删除的那段的位置:
{{ pg.page(page_data, "admin.comment_list") }}
至此,关于评论列表的介绍就到此为止了!接下来是评论的删除!
评论的删除
打开views.py文件,我们新定义comment_del函数:(仿照会员删除的函数)
# 删除评论
@admin.route('/comment/del/<int:id>', methods=["GET"])
@admin_login_req
def comment_del(id=None):
comment = Comment.query.get_or_404(int(id))
db.session.delete(comment)
db.session.commit()
flash("评论删除成功!", "ok")
return redirect(url_for("admin.comment_list", page=1))
然后打开comment_list.html页面,我们添加删除成功的flash提示(同样可以复制我们的preview_list.html页面的那一部分):
最后别忘了在comment_list.html页面添加删除跳转链接:
<br><a href="{{ url_for('admin.comment_del', id=v.id) }}" class="label label-danger pull-right">删除</a>
然后去测试一下我们的项目,看一看关于评论列表的相关功能是否都已经实现了呢!
至此本篇关于会员和评论管理的介绍就到此为止了,感谢你的赏阅!
本篇笔记对应上传的仓库为:https://github.com/licheetools/movie对应第九篇。