【问题标题】:How to handle simple form submission in python django? [closed]如何在 python django 中处理简单的表单提交? [关闭]
【发布时间】:2016-11-13 12:48:38
【问题描述】:

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

【问题讨论】:

标签: django


【解决方案1】:

如果您在 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')

【讨论】:

    【解决方案2】:

    你应该把它放在你视图中的表单标签之后

    {% csrf_token %}
    

    在渲染输出时使用

    return render(request, 'responsepage.html', context)
    

    Django 提供了这个安全特性来防止跨站点请求伪造。如果您不想使用此安全功能,您可以通过放置

    暂时禁用它
    @csrf_exempt
    

    来源:Django Forms Tutorial

    【讨论】:

    • 虽然在添加此注释后它正在工作。但我想使用 csrf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多