【问题标题】:How do I submit "POST" method forms in Django without AJAX?如何在没有 AJAX 的情况下在 Django 中提交“POST”方法表单?
【发布时间】:2013-11-29 22:48:47
【问题描述】:

我对 Django 完全陌生,我也在和一些朋友在这个框架中开发一个非常重要的项目。我在 Django 中提交 "POST" 方法表单时遇到问题。

我有"403 Forbidden" error。它说我的CSRF token isn't configured correctly。不过,我很确定我确实正确设置了它。 我的表单是关于更新数据库(MySQL)中的 django 用户帐户。我也不知道我的程序逻辑是否在视图中。由于这个愚蠢的错误,我什至没有机会对其进行测试。 下面的图片和代码说明了我的问题。

我的表格:

<form method="POST" action="/validacao/" name="user" class="current2"> {% csrf_token %}

    <table>
        <tr>
            <td>Nome:</td><td>
            <input type='text' name='first_name' maxlength='30' value='{{usuario.first_name}}' class="campo2" />
            </td> 
            <td>Permissão: <font style="color: red;">
            {% if usuario.is_staff %} Admin {% else %} Comum {% endif %}</font>
            </td>
        </tr>
        <tr>
            <td>Sobrenome:</td>
            <td><input type='text' name='last_name' maxlength='30' value='{{usuario.last_name}}' class="campo2" /></td>
        </tr>
        <tr>
            <td>Email:</td>
            <td><input type='text' name='email' maxlength='75' value='{{usuario.email}}' class="campo2"/></td>
        </tr>
        <tr>    
            <td>Senha:</td><td> <input type='password' name='password' maxlength='120' class="campo2"/></td>
        </tr>
        <tr>    
            <td>Confirmar Senha:</td><td><input type='password' name='password2' maxlength='120' class="campo2"/></td>
        </tr>
        <tr><td></td><td><input type='submit' name='salvar' value='Salvar' class="botao2"/></td></tr>
    </table>
</form>

我的看法:

def validacao_perfil(request):

    if request.POST:

        try:
            request.user.first_name = request.POST['first_name']
            request.user.last_name = request.POST['last_name']
            request.user.email = request.POST['email']
            request.user.password = request.POST['password']
            request.user.save()
            validacao=1
        except:
            validacao=0

    variaveis_resposta={  'usuario':request.user,
                          'MEDIA_URL':settings.MEDIA_URL,
                          'height_backgroud':'900',
                          'rodape':'position:relative; top: 148px;',
                          'ordem':0,
                          'validacao':validacao,
                          'context_instance':RequestContext(request),
                          }

    return render_to_response("perfil_usuario.html", variaveis_resposta)

Obs.:“urls.py”设置正确,奇怪的是我可以使用 Django 调试工具栏看到 csrftoken cookie var。

【问题讨论】:

  • 仍然,你的 settings.py 呢?您是否启用了'django.middleware.csrf.CsrfViewMiddleware'
  • 添加到 Alex:你在呈现的 html 中看到 csrf 令牌吗?

标签: python django forms post csrf


【解决方案1】:

只需将@csrf_exempt 放在你的def validacao_perfil(request): 上,看看是否可行,并尝试阅读django 的文档。非常好!!

【讨论】:

  • 我非常怀疑主题所有者希望他的代码“无论如何”工作,还有一个问题需要解决。
  • @csrf_exempt 是否禁用 CSRF 验证?我只是想让它在启用 CSRF 的情况下正常工作,但我没有运气。我有办法禁用这个 CSRF 东西,但我认为让它为这个项目工作很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多