1、新建middleware.py文件
# myapp/middleware.py
import time
from django.http import HttpRequest
import json
from django.http import JsonResponse
import urllib.parse
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}")json_data = json.loads(request.body.decode('utf-8'))# 获取请求头中的 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:data = {"code": "20001","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)