DRF 的装饰器

本文探讨了DRF框架中装饰器的使用,包括源码解析,展示了如何自定义装饰器,特别是如何创建带参数的装饰器,以增强视图功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码中的装饰器

def require_http_methods(request_method_list):
    """
    Decorator to make a view only accept particular request methods.  Usage::

        @require_http_methods(["GET", "POST"])
        def my_view(request):
            # I can assume now that only GET or POST requests make it this far
            # ...

    Note that request methods should be in uppercase.
    """
    def decorator(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            if request.method not in request_method_list:
                response = HttpResponseNotAllowed(request_method_list)
                log_response(
                    'Method Not Allowed (%s): %s', request.method, request.path,
                    response=response,
                    request=request,
                )
                return response
            return func(request, *args, **kwargs)
        return inner
    return decorator

通过 decorator实现对视图进行装饰器的封装,根据源码得出结论我们可以编写一个简单的装饰器

自定义装饰器

def decorator(func):
		@wraps(func)
        def inner(request, *args, **kwargs):
        	#在视图执行前执行我们的逻辑
        	response =  func(request, *args, **kwargs)
        	# 在视图执行完毕后然后执行我们的逻辑
	        return
	 return inner

自定义的带参数的装饰器

def auth(lt= []):
	def decorator(func):
			@wraps(func)
	        def inner(request, *args, **kwargs):
	        	#在视图执行前执行我们的逻辑,获取前端传递的参数进行校验,检验成功返回视图内容
	        	#失败返回错误
	        	for _ in lt:
	        		try:
	        			request.request.data.get(_)
        				response =  func(request, *args, **kwargs)
	        		except:
	        			return "请传递正确的参数"

	        	# 在视图执行完毕后然后执行我们的逻辑
		        return
		 return inner
	return decorator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值