• Sistemas Web
  • O método POST

O método POST

Enviando dados para o servidor

Existem muitos detalhes do que acontece por baixo dos panos que ainda não contamos para você. Um deles é que existe mais uma informação importante na requisição HTTP além da URL (que nos informa o endereço, porta e caminho): o verbo HTTP.

Até o momento estamos pensando em requisições que solicitam uma informação (a página HTML) ao servidor. Agora, porém, queremos criar uma nova anotação e para isso precisamos enviar informações para o servidor. Essa "intenção" é indicada em uma requisição usando um marcador conhecido como verbo HTTP. Quando queremos solicitar uma informação, usamos o verbo "GET". Quando queremos enviar uma informação, usamos o verbo "POST".

Quando digitamos o endereço de uma página no navegador, ou clicamos em um link, o navegador faz uma requisição do tipo GET: ele quer receber uma página HTML do servidor. Agora queremos enviar para o servidor os dados da nova anotação a ser criada. Por isso, usaremos o método POST.

Exercício 1

Modifique a tag <form> do seu template para:

<form method="post" action="/">

Os dois atributos adicionais são:

  • method="post": indica para o navegador que quando o formulário for submetido, a requisição deve utilizar o método POST;
  • action="/": indica para o navegador que quando o formulário for submetido, a requisição deve ser enviada para o caminho /. Como o endereço atual já está nesse mesmo caminho, este atributo seria desnecessário, mas usamos a oportunidade para apresentar essa funcionalidade, caso você precise fazer um POST para um caminho diferente.

Exercício 2

Aperte o botão de submissão do formulário na sua página. Qual erro ocorreu?

Resposta

Uma página como a mostrada abaixo deve ter aparecido. Já veremos o que significa esse erro.

Erro de CSRF

O ataque CSRF#

O Cross Site Request Forgery é um tipo de ataque no qual um site malicioso utiliza um link/form/javascript para submeter dados utilizando um usuário logado no seu sistema. Para se proteger desse tipo de ataque, todos os formulários do seu sistema devem enviar, através de um campo escondido, um token gerado pelo servidor. Assim, o servidor saberá que a requisição foi feita por um cliente confiável.

Isso pode soar complexo, mas basta inserir uma template tag no seu formulário. O Django cuida do resto.

Exercício 3

Adicione uma nova linha logo abaixo da abertura da tag <form> com a tag: {% csrf_token %}

Tente submeter seu formulário novamente. O efeito esperado é que a página apenas "recarregue".

Sabemos que o caminho vazio (/) é mapeado para a view index. Vamos modificá-la um pouco para vermos como essa informação é recebida.