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

wechat xuhss 692℃ 0评论

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

創建一個攔截器:

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

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

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

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

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

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

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

转载请注明:xuhss » Python flask实战订餐系统微信小程序-22实现管理员退出功能

喜欢 (8)

您必须 登录 才能发表评论!