【九月打卡】第11天+管理员后台账号模块开发

2022/9/16 4:17:18

本文主要是介绍【九月打卡】第11天+管理员后台账号模块开发,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

https://coding.imooc.com/learn/list/265.html


课程名称:Python Flask构建微信小程序订餐系统



课程章节:第七章 管理员后台账号模块开发——7-3 登录退出(2)



主讲老师:编程浪子





7-3 登录退出(2)

    1.拦截器

    1.判断是否已登录

    查询数据库计算出的cookie值与页面cookie值进行对比

    # 判断用户是否已登录

    def check_login():

        cookies = request.cookies  # 字典类型数据

        # 存在于字典则取出value值,否则返回""空值

        auth_cookie = cookies[app.config['AUTH_COOKIE_NAME']] if app.config['AUTH_COOKIE_NAME'] in cookies else None

     

        if auth_cookie is None:

            return False

     

        auth_info = auth_cookie.split("#")

        if len(auth_info) != 2:

            return False

     

        # 根据uid查询数据库用户信息

        try:

            user_info = User.query.filter_by(uid=auth_info[1]).first()

        except Exception:

            return False

     

        # 根据uid无法查询出该用户信息

        if user_info is None:

            return False

     

        # 查询的user_info对象的加密后的cookie值,与浏览器中的cookie不一致

        if auth_info[0] != UserService.geneAuthCode(user_info):

            return False

     

        return user_info

    https://img3.sycdn.imooc.com/632287b50001c02e11690885.jpg

     

     

     

    2.拦截器实现

    核心代码:

    from application import app

    from flask import request, redirect

    from common.models.User import User

    from common.libs.user.UserService import UserService

    from common.libs.UrlManager import UrlManager

    import re

     

     

    @app.before_request

    def before_request():

        ignore_urls = app.config['IGNORE_URLS']

        ignore_check_login_urls = app.config['IGNORE_CHECK_LOGIN_URLS']

     

        path = request.path

     

        # 静态文件不需要判断

        # 正则表达式匹配无需拦截的页面

        pattern = re.compile('%s' % "|".join(ignore_check_login_urls))

        if pattern.match(path):

            return

     

        user_info = check_login()

     

        # 登录页面无需重定向

        pattern = re.compile('%s' % "|".join(ignore_urls))

        if pattern.match(path):

            return

     

        if not user_info:

            # 用户cookie值返回False,则页面返回登录页面

            return redirect(UrlManager.buildUrl("/user/login"))

     

        return

             https://img3.sycdn.imooc.com/632287bf0001937b11730848.jpg

    

     

     

    3.拦截器运行结果

    https://img1.sycdn.imooc.com/632287c70001ea5119201030.jpg

     

     

    4.修改cookie值是否会自动跳转至登录界面

    https://img1.sycdn.imooc.com/632287d20001072d19201030.jpg

           https://img1.sycdn.imooc.com/632287dd0001020619201030.jpg

    

     

     

     

     

     

    2.登出操作

    核心代码:

    @route_user.route("/logout")

    def logout():

        # 实现登出操作

     

        # 页面重定向至/user/login

        response = make_response(redirect(UrlManager.buildUrl("/user/login")))

        # 删除response中的cookie值

        response.delete_cookie(app.config['AUTH_COOKIE_NAME'])

        return response

    页面重定向并删除浏览器缓存的cookie值

    https://img2.sycdn.imooc.com/632287e800018b0b09380734.jpg

     

    运行截图:

         https://img1.sycdn.imooc.com/632287fc000118a119201026.jpg

                   https://img2.sycdn.imooc.com/632288070001f1cf19201030.jpg



这篇关于【九月打卡】第11天+管理员后台账号模块开发的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程