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之后的响应吗?有人可以澄清吗?
答案 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教程是一个很好的资源。