如何使用Django中间件

如何使用Django中间件让访问更安全?🎉

嘿,朋友们!今天我们来聊聊如何在Django中使用自定义中间件保证某个文件夹的访问需要 token 验证。毕竟,有时候我们需要确保只有合法用户才能访问某些资源,对不对?😉

什么是中间件?

简单来说,中间件就是一种在 Django 应用请求和响应过程中拦截并处理请求的组件。它们在请求到达视图之前、在响应到达客户端之前能够进行各种操作。比如本次,我们将实现一个简单的 token 验证逻辑。

创建自定义中间件

首先,你需要创建一个新的 Python 文件来放置你的中间件。让我们叫它 mymiddleware.py 吧。接着,你在该文件中定义你的中间件类:

python 复制代码
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
from center.models import Users

class UserAuthMiddleWare(MiddlewareMixin):
    # 访问路由需要 token 验证
    def process_request(self, request):
        print(request.path)
        path = request.path  # 获取访问路径
       
        # 检查访问的路径是否需要 token 验证
        # 在这个例子里,'media' 路径需要验证
        if path.split('/')[1] == 'media':
            # 获取 header 中的 token
            token = request.META.get('HTTP_AUTHORIZATION')

            try:
                # 查找 token 对应的用户信息
                userinfo = Users.objects.filter(token=token).first()
            except Exception as e:
                return HttpResponse("Please Stay Away!")
            
            # 如果用户信息不存在,拒绝访问
            if userinfo is None:
                return HttpResponse("Please Stay Away!")

在上面的代码中,我们定义了一个类 UserAuthMiddleWare ,它继承自 MiddlewareMixin。我们在 process_request 方法中实现了 token 验证逻辑。当请求路径是 media 时,我们会从请求头中提取 Authorization 字段,然后在数据库中查找这个 token 的对应用户信息。如果找不到用户或者没有提供 token,我们将返回一个无权限访问的响应。

将中间件添加到 Django 设置

接下来,我们需要让 Django 知道有这么一个中间件,打开你的 settings.py 文件,找到 MIDDLEWARE 列表,并添加你的中间件路径:

python 复制代码
MIDDLEWARE = [
    ...
    'mymiddleware.UserAuthMiddleWare',
]

Voilà!这样就完成啦!🎉 现在,当你的用户访问 'media' 目录下的资源时,系统会检查他们是否已提供有效的 token。

结语

自定义中间件给了我们强大的工具来控制请求与响应的流向,记得在实际项目中,也要对你的中间件进行测试,以确保它能在各个场景下可靠地工作哦!有什么问题,欢迎在评论区讨论,我们下次见!👋

Keep coding, keep smiling! 😄

相关推荐
IT_陈寒18 分钟前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端
Niuguangshuo22 分钟前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
evans在进步1 小时前
Spring Boot 核心机制详解:可执行 JAR、CORS、静态资源与配置绑定
spring boot·后端·jar
2501_944676161 小时前
揭秘!WORDTIP公司靠不靠谱?小白必看
大数据·人工智能·python
Sayuanni%31 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
Minner-Scrapy2 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
CODER03042 小时前
Anaconda和Mamba创建环境管理包常用命令合集
python·深度学习·conda·虚拟环境·mamba·常用命令大全
闲猫2 小时前
LangGraph / Capabilities / Fault tolerance
python·agent·langgraph
陈随易2 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
IvanCodes3 小时前
Python 基础语法(一):变量、数据类型与运算符
python