Python flask实战订餐系统微信小程序-22实现管理员退出功能

B站配套视频教程观看

攔截器检测登录状态决定是否登录成功

創建一個攔截器:

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

@app.before_request
def before_request():
    path = request.path
    user_info =check_login()

    if not user_info:
        return redirect(UrlManager.buildUrl("/user/login"))

    return

'''
判断用户是否登录
'''
def check_login():
    cookies = request.cookies
    auth_cookie = cookies[app.config['AUTH_COOKIE_NAME']] if app.config['AUTH_COOKIE_NAME'] in cookies else None
    #app.logger.info(auth_cookie)
    if auth_cookie is None:
        return False

    auth_info = auth_cookie.split("#")
    if len(auth_info) != 2:
        return False

    try:
        user_info = User.query.filter_by(uid=auth_info[1]).first()
    except Exception:
        return False

    if user_info is None:
        return False

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

    return  auth_info


运行后发现重定向很多次:

base_setting.py配置過濾的url:

SERVER_PORT=8999
DEBUG = False
SQLALCHEMY_ECHO  = False

AUTH_COOKIE_NAME = "mooc_food"

# 過濾url
IGNORE_URLS = [
    r"^/user/login"
]

IGNORE_CHECK_LOGIN_URLS = [
    r"^/static",
    r"^/favicon.ico"
]

拦截器过滤掉不判断的url

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

    patten = re.compile(r'%s' %  r"|".join(ignore_check_login_urls))
    if patten.match(path):
        return

    user_info =check_login()

    patten = re.compile(r'%s' % r"|".join(ignore_urls))
    if patten.match(path):
        return

    if not user_info:
        return redirect(UrlManager.buildUrl("/user/login"))

    return

'''
判断用户是否登录
'''
def check_login():
    cookies = request.cookies
    auth_cookie = cookies[app.config['AUTH_COOKIE_NAME']] if app.config['AUTH_COOKIE_NAME'] in cookies else None
    #app.logger.info(auth_cookie)
    if auth_cookie is None:
        return False

    auth_info = auth_cookie.split("#")
    if len(auth_info) != 2:
        return False

    try:
        user_info = User.query.filter_by(uid=auth_info[1]).first()
    except Exception:
        return False

    if user_info is None:
        return False

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

    return  auth_info


此时运行 可以正确的跳转

登出功能实现

user.py

from flask import Blueprint,render_template,request,jsonify,make_response,redirect
from common.libs.UrlManager import UrlManager

@route_user.route( "/logout")
def logout():
    responce = make_response( redirect( UrlManager.buildUrl("/user/login") ) )
    responce.delete_cookie(app.config["AUTH_COOKIE_NAME"])
    return responce

运行时 退出账户时 可以看到删除了cookie

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值