如何在没有AJAX的情况下在Django中提交“POST”方法表单?

时间:2013-11-16 14:52:41

标签: python django forms post csrf

我对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。:&#34; urls.py&#34;设置正确,奇怪的是我可以使用Django调试工具栏看到csrftoken cookie var。

1 个答案:

答案 0 :(得分:-1)

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