Django设置中间件,不登录不能访问的接口

1、在 django 项目中新建文件夹 middleware 目录,在此目录下新建一个中间件文件:auth.py

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,redirect


class AuthMiddleware(MiddlewareMixin):
    """中间件"""

    def process_request(self, request):
        # 0.排除那些不需要登录就能访问的页面
        # request.path_info # 获取当前用户请求的 URL
        Interface = ["/tologin","/","/image/code/"] # 不需要登录就可以访问的接口
        print(request.path_info)
        if request.path_info in Interface:
            return
        # 1.读取当前访问的用户的 session 信息,如果能读到,说明已登录,就可以继续往后走

        # 如果方法中没有返回值,就返回 None,继续往后走
        # 如果有返回值 HttpResponse、render、redirect
        info_dict = request.session.get("info") # 读取 session 信息
        print(info_dict)
        if info_dict: # 如果有
            return

        # 2.没有登录过,跳转到登录页面
        return redirect('/')

2、需要去 settings.py 文件中注册中间件

# MIDDLEWARE  中注册新建的中间件 'web.middleware.auth.AuthMiddleware',
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'web.middleware.auth.AuthMiddleware',  # 中间件,谁在前面就先执行谁
]

 

posted @ 2022-07-07 16:40  彬彬有礼丶林  阅读(153)  评论(0)    收藏  举报