升级到 Django 1.11 后 csrftoken 标签不工作
csrftoken tag not working after upgrade to Django 1.11
我继承了我最初在 Django 1.9 上工作的 Django 应用程序。最近我将它迁移到 Django 1.11 和 Python 3.4(从 2.7)。从那时起,我的一些管理员视图开始出现 403 Forbidden 错误,CSRF 验证失败。我查看了 the documentation,并检查了以下内容:
- 我仍在使用
MIDDLEWARE_CLASSES
,但 django.middleware.csrf.CsrfViewMiddleware
包含在我的配置中(它是第二个,在 SessionMiddleware
和 CommonMiddleware
之后)。
- 使用的模板包含
{% csrf_token %}
内容。
- 视图使用
render_to_response()
,并将 RequestContext(request)
作为第三个参数传递给它。
(据我所知,None 在 Django/Python 升级期间或之后发生了变化。)
虽然我有相当多的 Python Web 编程经验,但我对 Django 的经验并不丰富。我是什么 missing/how 我可以进一步调试吗?
context_instance
参数改为 deprecated in 1.8 and was subsequently removed in 1.10. If you need the request in the context, use render()
并将请求作为第一个参数传递。您应该在第三个参数中将上下文作为普通字典传递。
我继承了我最初在 Django 1.9 上工作的 Django 应用程序。最近我将它迁移到 Django 1.11 和 Python 3.4(从 2.7)。从那时起,我的一些管理员视图开始出现 403 Forbidden 错误,CSRF 验证失败。我查看了 the documentation,并检查了以下内容:
- 我仍在使用
MIDDLEWARE_CLASSES
,但django.middleware.csrf.CsrfViewMiddleware
包含在我的配置中(它是第二个,在SessionMiddleware
和CommonMiddleware
之后)。 - 使用的模板包含
{% csrf_token %}
内容。 - 视图使用
render_to_response()
,并将RequestContext(request)
作为第三个参数传递给它。
(据我所知,None 在 Django/Python 升级期间或之后发生了变化。)
虽然我有相当多的 Python Web 编程经验,但我对 Django 的经验并不丰富。我是什么 missing/how 我可以进一步调试吗?
context_instance
参数改为 deprecated in 1.8 and was subsequently removed in 1.10. If you need the request in the context, use render()
并将请求作为第一个参数传递。您应该在第三个参数中将上下文作为普通字典传递。