Объект Django «WSGIRequest» не имеет атрибута «set_cookie»

Я продолжаю получать это исключение, когда делаю request.set_cookie() в process_view пользовательского класса промежуточного программного обеспечения. Вот порядок классов промежуточного программного обеспечения в моем файле settings.py:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'website.middleware.UserLastActiveMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',

)

person Dmitriy Smirnov    schedule 03.07.2013    source источник


Ответы (3)


Вы должны set_cookie() позвонить из response объекта. Пример:

def process_response(self, request, response):
    ...
    response.set_cookie('user_agreement', user_agreement, domain='.mysite.com')
    return response
person Abbasov Alexander    schedule 03.07.2013
comment
Теперь у меня есть новое исключение: NoneType' object has no attribute 'has_header'. Однако, на мой взгляд, у меня есть return self.render_to_response(context). Что бы это могло быть? - person Dmitriy Smirnov; 03.07.2013
comment
Где вы его используете, middleware или views.py? - person Abbasov Alexander; 03.07.2013
comment
Я пытаюсь установить файл cookie в промежуточном программном обеспечении. В views.py у меня есть представление на основе класса с TemplateResponseMixin, поэтому функция get представления возвращает self.render_to_response(context). - person Dmitriy Smirnov; 03.07.2013
comment
Это уже другая проблема вместо этого вопроса. Но кажется, вы неправильно назвали render_to_response(template_name[, dictionary][, context_instance][, content_type]) - person Abbasov Alexander; 03.07.2013

Начнем с того, что set_cookie() — это метод HttpResponse, а не HttpRequest, так как вы устанавливаете файлы cookie в своем ответе на запрос.

Во-вторых, ваше промежуточное ПО должно идти после AuthenticationMiddleware, так как предположительно оно связано с пользователями.

person Burhan Khalid    schedule 03.07.2013

Вы можете взглянуть на этот вопрос: Django: WSGIRequest ' объект не имеет атрибута "пользователь" на некоторых страницах?

Эта проблема обычно возникает, когда вы не добавляете косую черту в конце, потому что тогда выполняется перенаправление на URL-адрес, содержащий косую черту в конце.

person CJ4    schedule 03.07.2013