Um formulário POST
Parte da seção Forms do Journey de Django da Coddy. Lição 2 de 20.
A página /events/new/ e sua view estão prontas, mas a página não tem um formulário para adicionar um evento. Um formulário que altera dados usa method="post": o navegador envia os campos no corpo da requisição, não na URL. A view os lê de request.POST, usando como chave o name de cada campo de entrada.
O Django acrescenta uma regra. Outro site poderia ocultar um formulário que envia dados para o seu site, e o navegador do visitante o enviaria junto com os cookies: um ataque chamado CSRF. Por isso, o Django rejeita qualquer POST sem um token secreto da sua própria página, com o erro 403 Forbidden. {% csrf_token %} dentro do formulário insere esse token. Um formulário de newsletter:
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form>Um <label> identifica o campo de entrada cujo id corresponde ao seu for, e type="date" exibe um calendário.
Desafio
FácilEm new_event.html, escreva o formulário que a view espera:
- Ele envia seus campos com POST e inclui o token CSRF.
- Um campo de entrada, com um rótulo, para cada valor que a view lê. O campo de data exibe um calendário.
- Um botão de envio.
Clique em Run, adicione um evento e, em seguida, abra a página inicial.
Experimente você mesmo
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# Escreva o formulário aqui #}
{% endblock %}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Forms
Pratique por conta própria: Playground de Django