43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import json
|
|
from django.http import JsonResponse
|
|
from django.utils.deprecation import MiddlewareMixin
|
|
from rest_framework import status
|
|
|
|
|
|
class DemoModeMiddleware(MiddlewareMixin):
|
|
"""
|
|
演示环境中间件
|
|
全局禁止修改和删除操作
|
|
"""
|
|
|
|
def process_request(self, request):
|
|
# 只处理 API 请求
|
|
if not request.path.startswith('/api/'):
|
|
return None
|
|
|
|
# 禁止的 HTTP 方法
|
|
forbidden_methods = ['POST', 'PUT', 'PATCH', 'DELETE']
|
|
|
|
if request.method in forbidden_methods:
|
|
# 检查是否是登录接口,登录接口允许 POST
|
|
if request.path.endswith('/login/') or request.path.endswith('/auth/login/'):
|
|
return None
|
|
|
|
# 检查是否是登出接口,登出接口允许 POST
|
|
if request.path.endswith('/logout/') or request.path.endswith('/auth/logout/'):
|
|
return None
|
|
|
|
# 其他修改/删除操作一律禁止
|
|
response_data = {
|
|
'code': 403,
|
|
'message': '演示环境禁止修改和删除操作',
|
|
'data': None
|
|
}
|
|
|
|
return JsonResponse(
|
|
response_data,
|
|
status=status.HTTP_403_FORBIDDEN,
|
|
content_type='application/json'
|
|
)
|
|
|
|
return None |