Получение ошибки типа с использованием пользовательского промежуточного программного обеспечения в определенном представлении - PullRequest
0 голосов
/ 11 октября 2019

Это мое промежуточное ПО

class HasAccessMiddleware(object):
    def __init__(self, get_response):
        print("init")
        self.get_response = get_response

    def __call__(self, request):
        allowed_ips = WebSettings.get_allowed_ip()
        ip = request.META.get('REMOTE_ADDR')  # Get client IP
        if ip not in allowed_ips:
            return HttpResponse("false", status.HTTP_401_UNAUTHORIZED)
        print("call")
        return self.get_response(request)

Это моя настройка

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',
'tools.middleware.HasAccessMiddleware',

)

и это мое мнение

@decorator_from_middleware(HasAccessMiddleware)
def json_backup(request):
    pass

Я получаю эту ошибку

TypeError: __init__() takes exactly 2 arguments (1 given)

Не могли бы вы помочь мне найти, что не так? Спасибо

1 Ответ

0 голосов
/ 11 октября 2019

Если вы хотите использовать это только для шести представлений, напишите это непосредственно в качестве декоратора.

def has_access(view_func):
    @functools.wraps(view_func)
    def wrapped(request, *args, **kwargs):
        allowed_ips = WebSettings.get_allowed_ip()
        ip = request.META.get('REMOTE_ADDR')  # Get client IP
        if ip not in allowed_ips:
            return HttpResponse("false", status.HTTP_401_UNAUTHORIZED)
        return view_func(request, *args, **kwargs)

Теперь вы можете украсить свои представления с помощью @has_access.

...