__init __ () отсутствует 1 обязательный позиционный аргумент: 'get_response' - PullRequest
0 голосов
/ 07 июня 2019

Я использую Django 1.11 и получил эту ошибку

class TenantMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        set_tenant_schema_for_request(request)
        response = self.get_response(request)
        return response

Я пытался это исправить:

class TenantMiddleware:
    def process_response(self, request, response):
        set_tenant_schema_for_request(request)
        return response

это правильный эквивалент с использованием "нового" стиля промежуточного программного обеспечения?

1 Ответ

2 голосов
/ 07 июня 2019

Ваш первый пример - это пример промежуточного программного обеспечения нового стиля, а второй - пример промежуточного программного обеспечения старого стиля.Если вы все еще хотите использовать process_response(request, response) в промежуточном программном обеспечении нового стиля, вы должны использовать класс django.utils.deprecation.MiddlewareMixin как родительский класс вашего класса промежуточного программного обеспечения.

from django.utils.deprecation import MiddlewareMixin

# old-style middleware usage in new versions of django
class TenantMiddleware(MiddlewareMixin):

    def process_response(self, request, response):
        set_tenant_schema_for_request(request)
        return response

Если вы используете промежуточное программное обеспечение нового стиля ,,,

# new-style middleware usage and explanation
class TenantMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # implement process_request(request) logic here
        response = self.get_response(request)
        # implement process_response(request, response) logic here
        return response # returns HttpResponse or subclasses here.

В промежуточном программном обеспечении нового стиля код до self.get_response(request) совпадает с process_request(request), а код после self.get_response(request) совпадает с process_response(request, response).

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...