如何在python django中处理简单的表单提交?

时间:2016-07-11 14:14:59

标签: django

您好我正在尝试在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验证失败的相同错误。

2 个答案:

答案 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

来源:Django Forms Tutorial