django中自定义middleware以及auth模块的自定义扩展、admin的基本方法

本文详细介绍了Django中间件的五个方法及其应用,如全局访问校验和频率限制。接着讨论了Django auth模块,包括基本认证方法、装饰器校验和自定义auth_user表。此外,还讲解了Django admin的基本使用、启用方法以及如何通过ModelAdmin进行定制,如list_display、list_filter等选项的设置。

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

django中间件

中间件类似于门卫,在数据进入和离开的时候都需要经过中间件处理
主要作用为控制用户访问频率,全局登陆校验,用户访问白名单等

中间件五个方法

在这里插入图片描述
在这里插入图片描述

自定义中间件实现全局访问校验以及频率限制

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

# class M1(MiddlewareMixin):
#     def process_request(self, request):
#         print(request)
#         print('in M1')
#     def process_response(self, request, response):
#         print(request)
#         print('in M1 process_response')
#         return response
#
# class M2(MiddlewareMixin):
#     def process_request(self,request):
#         print(request)
#         print('in M2 ')
#     def process_response(self, request, response):
#         print(request)
#         print('in M2 process_response')
#         return response
#     #返回响应时倒序
from django.conf import settings
from app01.models import UserInfo
import time
class CheckLogin(MiddlewareMixin):
    def process_request(self,request):
        #判断配置项是否有配置,没有则初始化一个列表
        # while_urls=settings.WHITE_URLS if settings.WHITE_URLS else []
        while_urls=settings.WHITE_URLS if hasattr(settings,'WHITE_URLS') else []
        #判断是否在白名单,在就放行
        if request.path_info in while_urls:
            return None
        #从session
        user_id=request.session.get('user',None)
        if not user_id:
            return redirect('/middlewareLogin/')
        else:
            user_obj=UserInfo.objects.get(id=user_id)
            print(user_obj.email)
            #把user对象赋值给request对象自定义属性user
            request.user=user_obj.email
ACCESS_RECORD={
   }
class Throttle(MiddlewareMixin):
    def process_request(self,request):

        access_limit=settings.ACCESS_LIMIT if hasattr(settings,'ACCESS_LIMIT') else 1
        ip=request.META.get('REMOTE_ADDR')
        if ip not in ACCESS_RECORD:
            ACCESS_RECORD[ip]=[]
        history=ACCESS_RECORD[ip]
        now=time.time()

        while history and now-history[-1]>access_limit:
            history.pop()#长度超过三,把旧的记录pop掉
        history.insert(0,now)#把最新的插入最前面
        if len(history)>3:
            return HttpResponse('访问过于频繁!')

settings中注册中间件

MIDDLEWARE &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值