django 自定义中间件 接口装饰器

例子:现在要对一部分接口进行废除,采用全局自定义中间件实现

文件路径: 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")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值