例子:现在要对一部分接口进行废除,采用全局自定义中间件实现
文件路径: first_django_app\first_django_app\middleware_module\middleware_first.py
文件内容如下:
from django.http import JsonResponse
from django.utils.deprecation import MiddlewareMixin
class MWareFirst(MiddlewareMixin):
def process_request(self, reqeust):
if "/api/get_data/" == reqeust.path_info:
return JsonResponse({"code": -1, "msg": "该网址接口已废除"})
return
settings.py文件有关中间件内容变更
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 自定义中间件
'first_django_app.middleware_module.middleware_first.MWareFirst'
]
样例2: 某接口需要一个拦截装饰器
def validate_source_ip(func):
def inner(request, *args, **kwargs):
source_ip = request.META.get('REMOTE_ADDR')
if source_ip != "127.0.0.1":
return JsonResponse({"code": -1, "msg": "该接口只能用于本地测试"})
return func(request, *args, **kwargs)
return inner
def validate_logon_user(func):
def inner(request, *args, **kwargs):
logon_user = request.META.get('USERDOMAIN')
params = json.loads(request.body)
if "6-SIP0032" == logon_user or "user" in params and "SIP" in params['user']:
return func(request, *args, **kwargs)
return JsonResponse({"code": -1, "msg": "该接口只能SIP可以访问"})
return inner
def validate_secure_code(func):
def inner(request, *args, **kwargs):
params = json.loads(request.body)
if "secure_code" in params and "date_str" in params and md5_function(params['date_str']) == params['secure_code']:
return func(request, *args, **kwargs)
return JsonResponse({"code": -2, "msg": "经核对,密钥信息错误"})
return inner
def md5_function(obj_str):
md5_obj = hashlib.md5()
md5_obj.update(obj_str)
return md5_obj.hexdigest()
装饰器使用
from first_django_app.middleware_module.middleware_first import validate_source_ip, validate_logon_user, validate_secure_code
@validate_secure_code
@validate_logon_user
@validate_source_ip
def get_data(request):
"""
:param request:
:return:
"""
return HttpResponse(json.dumps({"a": 111}), content_type="application/json")