Данные запроса не могут быть доступны с этим кодом в функции обертки как я могу python3 django декоратор

не удается получить доступ к данным запроса в деораторе, как я могу это сделать? в моей функции-обертке

def my_decorator(view_func):
    def wrapper(request, *args, **kwargs):
        print('-start-')
        print(request.data)
        print(args)
        print(kwargs)
        print('-now-')
        response = view_func(request, *args, **kwargs)
        return response
    return wrapper



class HandymanCompleteProfileIos(APIView):
    @my_decorator
    def post(self, request, format = None):
        return JsonResponse({"A":"a"})

Первым аргументом метода экземпляра является self, поэтому функция-обертка должна быть определена с self в качестве первого аргумента, и передавать его обернутому методу при вызове:

def my_decorator(view_func):
    def wrapper(self, request, *args, **kwargs):
        print('-start-')
        print(request.data)
        print(args)
        print(kwargs)
        print('-now-')
        response = view_func(self, request, *args, **kwargs)
        return response
    return wrapper

По просьбе вашего комментария вот как можно параметризовать декоратор дополнительным аргументом extra_arg:

def my_decorator(extra_arg):
    def decorator(view_func):
        def wrapper(self, request, *args, **kwargs):
            print('-start-')
            print(request.data)
            print(args)
            print(kwargs)
            print(extra_arg)
            print('-now-')
            response = view_func(self, request, *args, **kwargs)
            return response
        return wrapper
    return decorator

попробуйте это:

from django.http import JsonResponse
from rest_framework.views import APIView

def my_decorator(view_func):
    def wrapper(request, *args, **kwargs):
        print('-start-')
        # Accessing request data
        print(request.data)  # For DRF, use request.data
        print(args)
        print(kwargs)
        print('-now-')
        response = view_func(request, *args, **kwargs)
        return response
    return wrapper

class HandymanCompleteProfileIos(APIView):
    @my_decorator
    def post(self, request, format=None):
        return JsonResponse({"A": "a"})
Вернуться на верх