django csrf RequestContext

时间:2011-04-17 05:16:33

标签: django django-templates django-forms

如果我在表单模板中包含{% csrf_token%}并在我的视图中导入RequestContext,

我是否必须在我的视图中包含任何其他内容,或者将csrf保护作为以下内容:

from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponseRedirect
from django.template import Template, RequestContext
from dash.forms import GradeForm


def register(request):
    if request.method == 'POST':
        form = GradeForm(data=request.POST)
        if form.is_valid():
            new_dash_profile = form.save()
            new_user = form.save()
            return  HttpResponseRedirect("/success/")
        else:
            form = RegisterForm()
        return render_to_response('grade.html',{'form':form})

1 个答案:

答案 0 :(得分:21)

对我来说,最简单的方法是将一个RequestContext添加到render_to_response函数

return render_to_response('grade.html',
                          {'form':form},
                          context_instance=RequestContext(request))

这只是一种可能性,重要的是你应该在某处处理csrf令牌,而RequestContext会这样做。

另一种可能性是手动执行:

from django.core.context_processors import csrf

params = {}
params.update(csrf(request))
return render_to_response('grade.html', params)