当前位置: 首页 > news >正文

django中间件,中间件给下面传值

1、新建middleware.py文件

# myapp/middleware.py
import time
from django.http import HttpRequest
import json
from django.http import JsonResponse
import urllib.parse
from django.core.cache import cache
from comm.Db import Db
class RequestTimeMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request: HttpRequest):
        # 记录请求开始时间
        # start_time = time.time()
        # 调用下一个中间件或视图,下面这个调用了,这里注销,不然调用两次
        # response = self.get_response(request)
        # 计算请求处理时间
        # process_time = time.time() - start_time
        # 打印处理时间
        # print(f"访问地址:{request.path},时间:{process_time:.4f}")
        # 获取请求头中的 User 和 Token,请求中中文乱码,使用urllib转码
        user = urllib.parse.unquote(request.META.get('HTTP_USER'))
        token = urllib.parse.unquote(request.META.get('HTTP_TOKEN'))
        if request.path == "/app/login":
            return response
        else:
            # 判断redis的token,和请求头的token是否相等,相等放行
            value = cache.get(f"{user}")
            if value == token:
                db = Db()
                list = db.query(f"select * from wb_admin where user='{user}'")
                db.close()
                if len(list) < 1:
                    data = {
                        "code": "2006",
                        "data": [],
                        "message": "账号不存在"
                    }
                    return JsonResponse(data)
                # 给 request 对象添加自定义属性,给路由加值,下面方法使用type = request.user_type获得
                request.user_type = list[0]['type']
                request.agent_id = list[0]['agent_id']
                response = self.get_response(request)
                return response

            # 获得post请求参数
            json_data = json.loads(request.body.decode('utf-8'))
            data = {
                "code": "2006",
                "data": json_data,
                "message": "没有权限访问"
            }
            return JsonResponse(data)

在这里插入图片描述
2、注册中间件settings.py

'middleware.middleware.RequestTimeMiddleware', #中间件

在这里插入图片描述

在这里插入图片描述
3、中间件给下面传值

 # 给 request 对象添加自定义属性,给路由加值,下面方法使用type = request.user_type获得
request.user_type = list[0]['type']
response = self.get_response(request)

完整代码

# myapp/middleware.py
import time
from django.http import HttpRequest
import json
from django.http import JsonResponse
import urllib.parse
from django.core.cache import cache
from comm.Db import Db
class RequestTimeMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request: HttpRequest):
        # 记录请求开始时间
        # start_time = time.time()
        # 调用下一个中间件或视图
        # response = self.get_response(request)
        # 计算请求处理时间
        # process_time = time.time() - start_time
        # 打印处理时间
        # print(f"访问地址:{request.path},时间:{process_time:.4f}")

        # 获取请求头中的 User 和 Token,请求中中文乱码,使用urllib转码
        user = urllib.parse.unquote(request.META.get('HTTP_USER'))
        token = urllib.parse.unquote(request.META.get('HTTP_TOKEN'))
        if request.path == "/app/login":
            return response
        else:
            # 判断redis的token,和请求头的token是否相等,相等放行
            value = cache.get(f"{user}")
            if value == token:
                db = Db()
                list = db.query(f"select * from wb_admin where user='{user}'")
                if len(list) < 1:
                    data = {
                        "code": "2006",
                        "data": [],
                        "message": "账号不存在"
                    }
                    return JsonResponse(data)
                # 给 request 对象添加自定义属性,给路由加值,下面方法使用type = request.user_type获得
                request.user_type = list[0]['type']
                response = self.get_response(request)
                return response

            # 获得post请求参数
            json_data = json.loads(request.body.decode('utf-8'))
            data = {
                "code": "2001",
                "data": json_data,
                "message": "没有权限访问"
            }
            return JsonResponse(data)
# 代理管理
# 必备引入
import json
from django.views.decorators.http import require_POST, require_http_methods
from django.http import JsonResponse
# 其它引入

# 查询接口
@require_http_methods(["POST"])
def select(request):
    json_data = json.loads(request.body.decode('utf-8'))
    type = request.user_type
    print(type)
    data = {
        "code": "2000",
        "data": json_data,
        "message": "登录成功"
    }
    return JsonResponse(data)

相关文章:

  • vue基础(八)
  • 2848、与车相交的点
  • 游戏引擎学习第103天
  • [FastAdmin] 上传图片并加水印,压缩图片
  • 重读《Java面试题,10万字208道Java经典面试题总结(附答案)》
  • 一种 SQL Server 数据库恢复方案:解密、恢复并导出 MDF/NDF/BAK文件
  • 【Elasticsearch】Mapping概述
  • 适用于iOS的应用商店优化(ASO)清单
  • Qt信号槽调用出错:Qt: Dead lock detected while activating a BlockingQueuedConnection
  • Anaconda 安装指南:Windows、macOS 和 Linux 的详细安装步骤
  • 轮子项目--消息队列的实现(3)
  • Redis初阶笔记
  • 【Linux】cron计划任务定时执行命令
  • 问界M8细节曝光,L3自动驾驶有了!
  • 【LeetCode】394. 字符串解码
  • Windows中指定路径安装DockerDesktop
  • 02、QLExpress从入门到放弃,相关API和文档
  • Electron:使用electron-react-boilerplate创建一个react + electron的项目
  • 回顾Golang的Channel与Select第一篇
  • Anaconda +Jupyter Notebook安装(2025最新版)
  • 躺着玩手机真有意思,我“瞎”之前最喜欢了
  • 消失的日本中年劳动者:任何人都有与社会脱节的风险
  • 厦大历史系教授林汀水辞世,曾参编《中国历史地图集》
  • “80后”商洛市委副书记、市政府党组副书记赵孝任商洛市副市长
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 打造沪派水乡的“湿意”,上海正在保护营造一批湿地空间