当前位置: 首页 > 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_responsedef __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 responseelse:# 判断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_responsedef __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 responseelse:# 判断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_typeprint(type)data = {"code": "2000","data": json_data,"message": "登录成功"}return JsonResponse(data)

http://www.mrgr.cn/news/90529.html

相关文章:

  • Rust 中的闭包:捕获环境的匿名函数
  • AI+大数据:数字化转型背后的智能引擎
  • 6.深度学习在推荐系统中的应用
  • Spring Boot从入门到精通:核心知识点+实战指南
  • WordPress 角标插件:20 种渐变色彩搭配,打造专属菜单标识
  • 开发指南099-同时传递文件和参数
  • 使用mermaid画流程图
  • 【核心特性】从鸭子类型到Go的io.Writer设计哲学
  • 企语企业管理系iFair(F23.2_a0)在Debian操作系统中的安装
  • C++基础学习记录—this指针和const关键字
  • mysql8.0使用MGR实现高可用
  • Linux内核 - 非仿生机器人之感知主控系统(协议栈)
  • android studio下载安装汉化-Flutter安装
  • 并发编程---多线程不安全示例以及解决,多线程创建方式
  • 【嵌入式Linux应用开发基础】read函数与write函数
  • 【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞
  • 自然语言处理NLP入门 -- 第三节词袋模型与 TF-IDF
  • haproxy+nginx负载均衡实验
  • 解锁大语言模型潜能:KITE 提示词框架全解析
  • DeepSeek-V3 技术报告
  • 设计模式全解(含代码实例)
  • 【科技革命】颠覆性力量与社会伦理的再平衡
  • web前端布局--使用element中的Container布局容器
  • C++基础学习记录—this指针
  • c#中“事件-event”的经典示例与理解
  • c++ 多线程知识汇总