亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第11天+管理員后臺賬號模塊開發

標簽:
Flask

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://img1.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://img1.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://img1.sycdn.imooc.com//632287e800018b0b09380734.jpg

     

    运行截图:

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

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

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消