Django 1.10中新版本的csrf是什么?

时间:2017-01-11 19:07:38

标签: python django python-2.7 django-views csrf

我遵循教程并使用此行获取TypeError:

c.update(csrf(request))

这是完整视图

from django.shortcuts import render
from django.views.decorators import csrf

def index(request):
    c = {} #dictionary called c
    c.update(csrf(request))
    return render(request, 'login/index.html', c)

我是否在做旧版本的更改?我是否错误地导入了csrf?我正在运行最新版本的Django。

1 个答案:

答案 0 :(得分:3)

TypeError是因为您导入了csrf装饰器而不是上下文处理器。应该是。

from django.core.context_processors import csrf

但是,在使用render快捷方式时,您不需要手动包含csrf令牌。它会自动使用包含csrf标记的请求上下文呈现模板。

def index(request):
    c = {}  # dictionary called c
    return render(request, 'login/index.html', c)

Django 1.3中引入了render快捷方式,因此多年来无需在视图中调用csrf(request)(即使在Django 1.3之前,它可能更容易使用render_to_responseRequestContext)。不幸的是,this example仍然存在于Django 1.8的文档中,所以它比它应该更常见。