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)