利用Flask搭建微电影视频网站爬虫博客

利用Flask搭建微电影视频网站(九):会员和评论管理

2018-09-12  本文已影响5人  啃饼小白

关于博主

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

                     微信公众号:  啃饼思录
                      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对应第九篇。

上一篇下一篇

猜你喜欢

热点阅读