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指出的,这应该由序列化程序完成