Django中间件——实现登陆验证

本文介绍了Django中间件的概念,它是面向切面编程的无侵入式插件系统,增强了框架的健壮性。文章详细讲解了Django内置的六个中间件切点函数,并以登录验证为例,阐述了自定义中间件的规则,包括继承MIDDLEWAREMIXIN,重写方法,并在settings.py中配置。最后,提供了具体的登录验证中间件的设置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中间件(MiddleWare)

定义

面向切面编程(IoC), 为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能。它是一个轻量,低级别的插件系统,用于全局范围内改变Django的输入,输出。每个中间件组件都负责做一些特定的功能。

内置的六个切点(钩子函数)

  1. _ _init _ _初始化函数:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件。
  2. process_request(self,request):在执行视图前被调用,多个中间件情况,按照setting.py中注册顺序执行。
  3. process_view(self,request,view_func,view_args,view_kwargs):调用视图之前执行,按照注册顺序执行。
  4. process_template_response(self,request,response):在视图刚好执行完后进行调用
  5. process_exception(self,request,exception):视图函数抛出异常时调用,按照注册顺序倒叙执行。
  6. process_response(self,request,response):所有响应返回浏览器之前调用,按照注册顺序倒叙执行。
    每个方法都可以返回None或者返回HttpResponse对象。如果是none,继续按照django定义的向下执行,如果返回是Httpresponse对象,则直接将该对象返回给用户。

自定义中间件

规则

1.要继承MIDDLEWAREMIXIN类,

2.要重写父类方法

3.将类添加到setting.py文件中MIDDLEWARE配置项里

实例之——登录验证

1.setting.py 文件在MIDDLEWARE中注册

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',
    'beau.a.b'  # 自定义中间件  子app名.自定义中间件文件名.类名
]
# 放行url,不进行登录验证
EXCLUDE_URL = [
    "/login"
]

# 用户名密码
USERS = [
    ("a", "a")
]

2.在子app中自定义py文件

import re
from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin
from Novel.settings import EXCLUDE_URL, USERS


exclued_path = [re.compile(item) for item in EXCLUDE_URL]


class b(MiddlewareMixin):
    """
    访问控制
    """

    def process_request(self, request):
        # 放行
        url_path = request.path
        for each in exclued_path:
            if re.match(each, url_path):
                return None

        # 验证
        user = request.session.get('user')
        password = request.session.get('password')
        if (user, password) in USERS:
            return None
        else:
            return redirect('/login')


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值