Python 将请求对象和额外参数获取到自定义装饰器中
我想写一个定制的装饰。我想检查是否所有必需的参数都随请求一起发送。我写了这样的东西:Python 将请求对象和额外参数获取到自定义装饰器中,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想写一个定制的装饰。我想检查是否所有必需的参数都随请求一起发送。我写了这样的东西: def get_parameters_required(parameters=None): missing_parameter = False if parameters is not None: for parameter in parameters: if request.GET.get(parameter) is None:
def get_parameters_required(parameters=None):
missing_parameter = False
if parameters is not None:
for parameter in parameters:
if request.GET.get(parameter) is None:
missing_parameter = True
if missing_parameter:
return HttpResponse(status=400)
def _get_parameters_required(view_func):
def _decorator(request, *args, **kwargs):
response = view_func(request, *args, **kwargs)
return response
return wraps(view_func)(_decorator)
return _get_parameters_required
这不起作用,因为我没有检查参数的请求对象。在我有request对象的地方,我没有parameters对象
这个问题有没有内置的解决方案,或者我如何才能以正确的方式编写这个decorator?为什么不在
序列化程序中确保这一点,毕竟这就是它们的用途
如果您使用的是基于功能的DRF视图:-
def get_parameters_required(parameters=None):
def _get_parameters_required(view_func):
def _decorator(request, *args, **kwargs):
missing_parameter = False
if parameters is not None:
for parameter in parameters:
if request.GET.get(parameter) is None:
missing_parameter = True
if missing_parameter:
return HttpResponse(status=400)
response = view_func(request, *args, **kwargs)
return response
return wraps(view_func)(_decorator)
return _get_parameters_required
在当前实现中,您需要检查请求方法内部的参数,而不是外部的参数。整个if
语句应该位于嵌套的\u decorator
函数内部,您可以在该函数中访问请求。然后,仅当缺少的参数为False时才调用view\u func()
也就是说,正如Hsandher指出的,这应该由序列化程序完成