从项目中学习Django 天天生鲜---------后台页面Django用中间件代替装饰器

登录装饰器在该项目中的缺陷

在这里插入图片描述
从上图可以发现,每当创建一个视图函数时都需要在函数名中添加装饰器,这里项目功能不多所以面对这个问题产生的影响较小,但是当项目功能更多时,这种就会让开发者烦恼
所以Django开发者也想到这个问题,所以就有一些特点的中间件来解决这些小问题

中间件

在此之前先了解一下Django的中间件
改变全局范围内Django的请求和响应。慎用!!!在这里插入图片描述
Django中有一些内置的中间件,每一个中间件都有特定的功能。
在这里插入图片描述

自定义中间件

创建中间件

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

注册

在这里插入图片描述

覆写方法

MiddlewareMixin有五个方法需要我们覆盖,可以选择性覆盖接下来就一一讲解每个方法的作用

在这里插入图片描述

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

对于装饰器我们就只要用到覆盖第一个方法即可,因为我们需要在确认是否登录才能实现其他视图函数

用中间件代替装饰器

在上面的过程中我们已经创建并注册了中间件
接下来就是覆盖第一个方法了
middleware\authmiddleware.py

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



class AuthMD(MiddlewareMixin):
    # 在视图函数执行之前执行
    # 白名单
    white_list = [
        '/seller/login',  # 登录
        '/seller/register',  # 注册
    ]
    def process_request(self,request):
        # 获取url
        path=request.path_info
        if path.find("seller")!=-1:
            if path in self.white_list:
                return None #放行
            else:
                # 判断是否已经登录,如果没有登录自动跳转到登录界面
                if request.COOKIES.get("seller_id"):
                    return None
                else:
                    return redirect('/seller/login')
    # #在视图函数有异常的时候执行
    def process_response(self,request,response):
        if response.status_code == 404 or response.status_code == 500:
            return render(request,"404/index.html")
        else:
            return response


写完代码我们就可以去视图函数中去掉登录装饰器了
在这里插入图片描述

测试

http://127.0.0.1:8000/

在这里插入图片描述
这里因为我添加了404页面
在这里插入图片描述
当路由找不到时会自动跳转到404页面

当我们访问http://127.0.0.1:8000/seller时因为我们没有登录结果自动跳转到了登录界面
在这里插入图片描述
当我们登录后
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值