django中MIDDLEWARE_CLASSES的顺序

时间:2012-03-30 01:33:45

标签: python django

djangobook有section

  

要激活此CSRF保护,请添加   'django.contrib.csrf.middleware.CsrfMiddleware'来了   设置文件中的MIDDLEWARE_CLASSES设置。这个中间件   需要在SessionMiddleware之后处理响应,所以   CsrfMiddleware必须出现在列表中的SessionMiddleware之前   (因为响应中间件是从头到尾处理的。)

然而,djangoproject page告诉它不同

  

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

这有点令人困惑.CsrfViewMiddleware现在处理SessionMiddleware之后的响应吗?有人可以澄清吗?

1 个答案:

答案 0 :(得分:1)

来自Django文档:

  

将中间件'django.middleware.csrf.CsrfViewMiddleware'添加到您的   中间件类列表,MIDDLEWARE_CLASSES。 (它应该来了   任何认为已经处理了CSRF攻击的视图中间件   用。)

来源:https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#how-csrf-works

这是我在新生成的Django项目(1.3.1)中的中间件列表:

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

所以,是的,Django现在在会话中间件之后处理CSRF中间件。

Django Book严重过时 - 我不会将它用作学习Django的资源。另一方面,Django教程是一个很好的资源。