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 também protege todos os formulários POST. 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. Esse ataque é chamado de falsificação de solicitação entre sites, ou CSRF, abreviação em inglês. 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 inclui 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 events/templates/events/new_event.html, substitua {# Write the form here #} por um formulário.
- Use
method="post"e coloque{% csrf_token %}primeiro. Sem ele, o Django recusa o formulário com erro 403. - Adicione um campo de entrada com rótulo para
title,date(comtype="date") eplace, depois um botão de envio.
Adicione um evento e, em seguida, pressione Todos os eventos: ele estará na lista.
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