您好我正在尝试在django中处理简单的表单提交。但仍然经过几个小时的尝试。我收到csrf验证失败错误。我搜索了很多但到目前为止找不到解决方案。
这是我的代码
def index(request):
if request.method == 'POST':
username = request.POST.get('username')
useremail = request.POST.get('useremail')
context = {
'username': username,
'useremail': useremail
}
template = loader.get_template('responsepage.html')
return HttpResponse(template.render(context, request))
else:
template = loader.get_template('formpage.html')
return HttpResponse(template.render())
这是我的表格
<form method="post" action="/getdata/">
{{% csrf_token %}}
<input type="text" name="username" />
<input type="email" name="useremail" />
</form>
我在这里写过csrf_token变量。但是我仍然遇到csrf验证失败的相同错误。
答案 0 :(得分:2)
如果您在formpage.html
模板上使用csrf令牌,则需要使用request
对象呈现模板。
template = loader.get_template('formpage.html')
return HttpResponse(template.render(request=request))
您可能希望使用render
快捷方式来简化代码:
from django.shortcuts import render
def index(request):
if request.method == 'POST':
...
return render(request, 'responsepage.html', context)
else:
return render(request, 'formpage.html')
答案 1 :(得分:0)
您应该将此格式标记放在视图中
{% csrf_token %}
在渲染输出时使用
return render(request, 'responsepage.html', context)
Django提供此安全功能以防止跨站点请求伪造。如果您不想使用此安全功能,可以通过添加
暂时禁用它@csrf_exempt