Conta conectada após o cadastro
Parte da seção Usuários e contas do Journey de Django da Coddy. Lição 5 de 16.
Um novo usuário se cadastra e, em seguida, precisa digitar na página de login a senha que escolheu segundos atrás. A própria view pode fazer o login.
login(request, user) de django.contrib.auth inicia uma sessão para o usuário que você passar, a mesma sessão que LoginView inicia depois de verificar uma senha. login() não verifica nada, então chame essa função somente para um usuário em quem seu código já confia. Um site de jogos faz o login de um jogador quando ele abre o link do e-mail de boas-vindas:
from django.contrib.auth import login
def welcome(request, token):
player = get_object_or_404(Player, welcome_token=token)
login(request, player.user)
return redirect("games:lobby")Na sua view de cadastro, o usuário confiável é aquele retornado por form.save().
Desafio
FácilEm signup (notes/views.py), depois de salvar o formulário, autentique o novo usuário e redirecione para notes:list em vez de login. Um formulário recusado não autentica ninguém.
Crie uma conta em /signup/: o cabeçalho mostra Signed in as e seu nome. Um nome já usado, como ada, exibe um erro.
Experimente você mesmo
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import get_object_or_404, redirect, render
from .forms import NoteForm
from .models import Note
def note_list(request):
notes = Note.objects.all()
return render(request, "notes/note_list.html", {"notes": notes})
def note_detail(request, pk):
note = get_object_or_404(Note, pk=pk)
return render(request, "notes/note_detail.html", {"note": note})
def note_create(request):
if request.method == "POST":
form = NoteForm(request.POST)
if form.is_valid():
note = form.save()
return redirect("notes:detail", pk=note.pk)
else:
form = NoteForm()
return render(request, "notes/note_form.html", {"form": form})
def note_edit(request, pk):
note = get_object_or_404(Note, pk=pk)
if request.method == "POST":
form = NoteForm(request.POST, instance=note)
if form.is_valid():
form.save()
return redirect("notes:detail", pk=note.pk)
else:
form = NoteForm(instance=note)
return render(request, "notes/note_form.html", {"form": form, "note": note})
def note_delete(request, pk):
note = get_object_or_404(Note, pk=pk)
if request.method == "POST":
note.delete()
return redirect("notes:list")
return render(request, "notes/note_confirm_delete.html", {"note": note})
def signup(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect("login")
else:
form = UserCreationForm()
return render(request, "notes/signup.html", {"form": form})
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Usuários e contas
1Quem está visitando
Quem está visitandoFazendo loginPratique por conta própria: Playground de Django