美文网首页利用Flask搭建微电影视频网站
利用Flask搭建微电影视频网站(十):收藏管理和密码修改

利用Flask搭建微电影视频网站(十):收藏管理和密码修改

作者: 啃饼小白 | 来源:发表于2018-09-13 07:38 被阅读10次

    关于博主

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

                      微信公众号:  啃饼思录
    
                       QQ: 2810706745(啃饼小白)
    

    写在前面

    本篇笔记,我们介绍收藏管理和密码修改,这个和前面介绍的标签,电影,预告管理差不多,所以我就加快速度,话不多说,开始学习吧。

    本篇笔记对应上传的仓库为:https://github.com/licheetools/movie对应第十篇。

    收藏管理

    使用到的内容

    我们将使用到的内容有:
    模型:Moviecol
    表单: 无 (这个不涉及到表单的提交)
    请求方法: GET
    访问控制: @admin_login_req

    插入一些数据

    为了后续开发的必要,我们来在数据库里,插入一些数据:在终端输入cmd,然后输入mysql -uroot -proot后回车,接着use movie; 然后查询一下moviecol的信息:select * from moviecol;接着复制粘贴下面的代码:

    # 收藏列表
    insert into moviecol(movie_id,user_id,addtime) values(5,1,now());
    insert into moviecol(movie_id,user_id,addtime) values(5,2,now());
    insert into moviecol(movie_id,user_id,addtime) values(5,3,now());
    insert into moviecol(movie_id,user_id,addtime) values(5,4,now());
    insert into moviecol(movie_id,user_id,addtime) values(1,5,now());
    insert into moviecol(movie_id,user_id,addtime) values(1,6,now());
    insert into moviecol(movie_id,user_id,addtime) values(1,7,now());
    insert into moviecol(movie_id,user_id,addtime) values(1,8,now());
    
    ALTER TABLE moviecol auto_increment=1;
    
    

    之后回车,然后再次查询一下我们的数据库:select * from moviecol;,看是不是这样的信息:

    mysql> select * from moviecol;
    +----+----------+---------+---------------------+
    | id | movie_id | user_id | addtime             |
    +----+----------+---------+---------------------+
    |  1 |        5 |       1 | 2018-08-11 14:15:07 |
    |  2 |        5 |       2 | 2018-08-11 14:15:08 |
    |  3 |        5 |       3 | 2018-08-11 14:15:08 |
    |  4 |        5 |       4 | 2018-08-11 14:15:08 |
    |  5 |        1 |       5 | 2018-08-11 14:15:08 |
    |  6 |        1 |       6 | 2018-08-11 14:15:08 |
    |  7 |        1 |       7 | 2018-08-11 14:15:08 |
    |  8 |        1 |       8 | 2018-08-11 14:15:08 |
    +----+----------+---------+---------------------+
    8 rows in set (0.11 sec)
    
    mysql>
    

    接着打开views.py文件,我们修改收藏列表函数(仿照之前的电影列表):

    from app.models import MovieCol
    
    
    # 电影收藏列表
    @admin.route('/moviecol/list/<int:page>/', methods=["GET"])
    @admin_login_req
    def moviecol_list(page=None):
        if page is None:
            page = 1
            # 查询的时候关联标签,采用join来加进去,多表关联用filter,过滤用filter_by
        page_data = MovieCol.query.join(
            Movie
        ).join(
            User
        ).filter(
            Movie.id == MovieCol.movie_id,
            User.id == MovieCol.user_id
        ).order_by(
            MovieCol.addtime.desc()
        ).paginate(page=page, per_page=10)
        return render_template("admin/moviecol_list.html", page_data=page_data)
    
    

    接着去修改grid.html页面,修改gird中标签列表的url,为其添加参数page =1:

    <a href="{{ url_for('admin.moviecol_list', page=1) }}">
             <i class="fa fa-circle-o"></i> 收藏列表
    </a>
    
    然后打开moviecol_list.html页面,开始for循环的遍历:

    然后就是分页功能了,我们参考之前在标签列表页面的配置,打开moviecol_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.moviecol_list") }}
    

    至此,关于收藏列表的介绍就到此为止了!接下来是收藏的删除!

    收藏的删除

    打开views.py文件,我们新定义moviecol_del函数:(仿照会员删除的函数)

    # 删除收藏
    @admin.route('/moviecol/del/<int:id>', methods=["GET"])
    @admin_login_req
    def moviecol_del(id=None):
        moviecol = MovieCol.query.get_or_404(int(id))
        db.session.delete(moviecol)
        db.session.commit()
        flash("收藏删除成功!", "ok")
        return redirect(url_for("admin.moviecol_list", page=1))
    
    然后打开moviecol_list.html页面,我们添加删除成功的flash提示(同样可以复制我们的preview_list.html页面的那一部分):

    最后别忘了在moviecol_list.html页面添加删除跳转链接:

     <a href="{{ url_for('admin.moviecol_del', id=v.id) }}" class="label label-danger">删除</a>
    

    然后去测试一下我们的项目,看一看关于收藏列表的相关功能是否都已经实现了呢!(记住收藏是不可以对收藏的内容进行编辑的!!!)

    修改密码

    使用到的内容

    我们将使用到的内容有:
    模型:Admin
    表单: PwdForm
    请求方法: GET ,POST
    访问控制: @admin_login_req

    1、添加表单验证字段

    打开forms.py,我们定义Form字段,注意因为是修改密码模块,所以对应的html页面就是pwd.html,而且我们在forms.py里面定义的字段必须与pwd.html里面的保持一致!(如果觉得不是很容易看出来,可以运行项目,直接访问pwd.html页面,这样明显多了!)

    # 修改密码
    class PwdForm(FlaskForm):
        old_pwd = PasswordField(
            label="旧密码",
            validators=[
                DataRequired("旧密码不能为空!")
            ],
            description="旧密码",
            render_kw={
                "class": "form-control",
                "placeholder": "请输入旧密码!",
                # "required": "required"   # 注释此处显示forms报错errors信息
            }
        )
        new_pwd = PasswordField(
            label="新密码",
            validators=[
                DataRequired("新密码不能为空!")
            ],
            description="新密码",
            render_kw={
                "class": "form-control",
                "placeholder": "请输入新密码!",
                # "required": "required"   # 注释此处显示forms报错errors信息
            }
        )
        submit = SubmitField(
            '修改',
            render_kw={
                "class": "btn btn-primary",
            }
        )
    

    2、准备页面渲染字段

    打开admin/views.py文件,我们修改pwd函数:

    from app.admin.forms import PwdForm
    
    
    # 修改密码
    @admin.route('/pwd/', methods=["GET", "POST"])
    @admin_login_req
    def pwd():
        form = PwdForm()
        return render_template("admin/pwd.html", form=form)
    

    3、修改pwd.html页面显示:

    4、填写信息提示

    5、表单字段验证

    打开admin/forms.py文件,我们新增以下代码:

        def validate_old_pwd(self, field):
            from flask import session
            pwd = field.data
            name = session["admin"]
            admin = Admin.query.filter_by(
                name=name
            ).first()
            if not admin.check_pwd(pwd):
                raise ValidationError("旧密码输入错误!")
    
    

    6、修改密码逻辑业务

    打开admin/views.py文件,我们修改pwd函数:

    
    # 修改密码
    @admin.route('/pwd/', methods=["GET", "POST"])
    @admin_login_req
    def pwd():
        form = PwdForm()
        if form.validate_on_submit():   # 表单验证,没有这个则无法进行错误信息提示
            data = form.data
            admin = Admin.query.filter_by(name=session["admin"]).first()
            from werkzeug.security import generate_password_hash
            admin.pwd = generate_password_hash(data["new_pwd"])
            db.session.add(admin)
            db.session.commit()
            flash("修改密码成功,请重新登录!", "ok")
            return redirect(url_for("admin.logout"))
        return render_template("admin/pwd.html", form=form)
    

    7、页面操作信息提示

    打开打开login.html文件,我们修改为图示信息:


    8、个人中心信息显示

    打开admin.html页面,我们修改这里:

    然后运行一下,看一下我们的修改密码是不是都可以使用了呢!

    至此,本篇关于收藏管理和密码修改的介绍就到此为止了,感谢你的赏阅!

    本篇笔记对应上传的仓库为:https://github.com/licheetools/movie对应第十篇。

    相关文章

      网友评论

        本文标题:利用Flask搭建微电影视频网站(十):收藏管理和密码修改

        本文链接:https://www.haomeiwen.com/subject/yyeegftx.html