Capítulo 22
Django: admin e formulário
2 min de leitura 416 palavras 1 gravura
Neste capítulo você vai registrar Post no admin e criar post por formulário. O projeto-fio é o Ateliê Boa Viagem, ateliê digital fictício em Boa Viagem, Recife.
Seu ponto de partida
Use o exemplo 22-django-admin do pacote anexo e copie inicio/ para uma pasta de prática fora do original. A raiz do exemplo é a referência completa desta etapa.
Use servidor só em 127.0.0.1 quando o README do exemplo pedir HTTP local. Abrir ou testar não publica nada.
Como praticar
Leia → copie ou digite → mude uma coisa → preveja → salve → recarregue → confira. Restaure cada experiência antes da próxima. Faça as atividades antes de abrir as respostas comentadas.

Admin para edição interna
admin.site.register(Post) libera edição local após createsuperuser. Use senha só de estudo, nunca reaproveitada.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
from .models import Post
admin.site.register(Post)
Mude uma coisa e preveja
Crie um post pelo admin.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
Ele aparece na lista pública.
Se não acontecer
Crie o superusuário local.
Formulário ModelForm
Um form público de estudo grava título e texto. CSRF fica ligado.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['titulo', 'texto', 'autor']
Mude uma coisa e preveja
Torne autor opcional no formulário se quiser.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
Submit válido redireciona à lista.
Se não acontecer
Inclua {% csrf_token %} no template.
Sem cadastro real
Não colete dados pessoais. O blog é fictício. Apague o SQLite de prática se for compartilhar a pasta.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
dados fictícios somente
Mude uma coisa e preveja
Publique dois posts de exemplo.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
Ambos listados.
Se não acontecer
migrate e runserver ativos.
Atividades
Atividade 1
Para que serve o admin?
Atividade 2
Por que csrf_token?
Atividade 3
Pode reutilizar a senha do superusuário em outro lugar?
Respostas comentadas
Resposta da atividade 1
Editar dados em ambiente local de estudo.
Resposta da atividade 2
Proteção contra CSRF em POST.
Resposta da atividade 3
Não.
O arquivo completo
Referência do exemplo 22-django-admin, reproduzida aqui para que você possa conferir sem sair da página.
manage.py
#!/usr/bin/env python
import os, sys
def main():
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "atelie.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()
posts/templates/posts/novo.html
<!DOCTYPE html>
<html lang="pt-BR"><head><meta charset="utf-8"><title>Novo post</title></head>
<body>
<h1>Novo post</h1>
<form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">Salvar</button></form>
<p><a href="/">Voltar</a></p>
</body></html>