Créer un compte
Fait partie de la section Utilisateurs et comptes du Journey Django de Coddy. Leçon 4 sur 16.
Seule ada peut se connecter : un visiteur n’a aucun moyen de créer un compte. Django n’a pas de page d’inscription, mais il fournit le formulaire correspondant, UserCreationForm dans django.contrib.auth.forms.
C’est un ModelForm pour User avec trois champs : username, password1 et password2. Il refuse un nom déjà pris, deux mots de passe différents et un mot de passe qui enfreint les règles de AUTH_PASSWORD_VALIDATORS (trop court, trop courant, composé uniquement de chiffres). Sa méthode save() stocke le mot de passe sous forme hachée, jamais en texte brut. Essayez-le dans l’onglet Shell :
>>> from django.contrib.auth.forms import UserCreationForm
>>> form = UserCreationForm({"username": "kim", "password1": "tea-kettle-42", "password2": "tea-kettle-42"})
>>> form.is_valid()
True
>>> user = form.save()
>>> user.password == "tea-kettle-42"
FalseDans une vue, cela fonctionne comme NoteForm : une branche pour la requête POST, une autre pour le formulaire vide.
Défi
FacilePermets aux visiteurs de créer un compte.
- Dans
notes/views.py, écris une vuesignupqui affiche unUserCreationFormdansnotes/signup.html(déjà prêt). Lorsque le formulaire est valide, enregistre-le et redirige verslogin. - Dans
notes/urls.py, ajoutesignup/avec le nomsignup. - Dans
base.html, à côté deLog in, crée un lienSign upvers{% url 'notes:signup' %}.
Crée un compte sur /signup/, puis connecte-toi avec celui-ci.
Essayez vous-même
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})
Toutes les leçons de Utilisateurs et comptes
1Qui visite le site
Qui visite le siteSe connecterEntraînez-vous par vous-même : Playground Django