【问题标题】:Django 'WSGIRequest' object has no attribute 'set_cookie'Django 'WSGIRequest' 对象没有属性 'set_cookie'
【发布时间】:2013-07-03 06:36:05
【问题描述】:

当我在自定义中间件类的process_view 中执行request.set_cookie() 时,我不断收到此异常。这是我的 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',

)

【问题讨论】:

    标签: django django-middleware


    【解决方案1】:

    首先是set_cookie() is a method of HttpResponse,而不是HttpRequest,因为您在响应请求时设置了cookie。

    其次,您的中间件应该在AuthenticationMiddleware 之后,因为它可能与用户有关。

    【讨论】:

      【解决方案2】:

      您应该从response 对象中调用set_cookie()。 示例:

      def process_response(self, request, response):
          ...
          response.set_cookie('user_agreement', user_agreement, domain='.mysite.com')
          return response
      

      【讨论】:

      • 现在我有了一个新的例外:NoneType' object has no attribute 'has_header'。但是,在我看来,我有return self.render_to_response(context)。会是什么?
      • 你在哪里使用,中间件还是views.py?
      • 我正在尝试在中间件中设置 cookie。在views.py 中,我有一个基于类的视图,带有一个 TemplateResponseMixin,因此视图的get 函数返回self.render_to_response(context)。
      • 这已经是另一个问题而不是这个问题。但是你好像打错了render_to_response(template_name[, dictionary][, context_instance][, content_type])
      【解决方案3】:

      你可以看看这个问题:Django: WSGIRequest' object has no attribute 'user' on some pages?

      当您不添加尾部斜杠时通常会出现此问题,因为这样会重定向到包含尾部斜杠的 url

      【讨论】:

        猜你喜欢
        • 2018-02-14
        • 2019-01-19
        • 2018-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-05
        • 2016-10-23
        • 2021-07-04
        相关资源
        最近更新 更多