使用Django 1.8时,我不想在用户未登录时在我网站的主页上设置cookie。所以我用@csrf_exempt装饰我的视图
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def mainhome(request):
当我查看查询时,我可以看到cookie仍然设置,为什么?
rodo@roz-desktop:~/(master)$ curl -I http://127.0.0.1:8000/
HTTP/1.0 200 OK
Date: Sat, 13 Jun 2015 08:59:27 GMT
Server: WSGIServer/0.1 Python/2.7.8
Content-Type: text/html; charset=utf-8
Vary: Cookie
X-QueryInspect-Duplicate-SQL-Queries: 2
X-QueryInspect-Total-SQL-Time: 34 ms
X-QueryInspect-Total-Request-Time: 283 ms
X-QueryInspect-Num-SQL-Queries: 3
Set-Cookie: csrftoken=sa5x0DyxgBamca0D84ZZnzl2WAL0evkv; expires=Sat, 11-Jun-2016 08:59:27 GMT; Max-Age=31449600; Path=/
答案 0 :(得分:2)
正如@Daniel Roseman指出的那样,@csrf_exempt
对你没有帮助。
负责会话cookie的中间件是SessionMiddleware
。您可以在Django Docs: How to use sessions中详细了解相关信息。不幸的是,没有类似的装饰器可以免除某些特定的观点。
因此,为了自定义中间件的行为,您需要继承SessionMiddleware
。 SO上有一个nice answer的问题。
答案 1 :(得分:0)
csrf_exempt
控制是否在POST上强制执行CSRF。它与CSRF cookie是否设置无关;这是由CsrfViewMiddleware为所有响应完成的。