Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Em events/templates/events/new_event.html, substitua {# Write the form here #} por um formulário.

  1. Use method="post" e coloque {% csrf_token %} primeiro. Sem ele, o Django recusa o formulário com erro 403.
  2. Adicione um campo de entrada com rótulo para title, date (com type="date") e place, 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 %}
quiz iconTeste seus conhecimentos

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