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à utilisé, 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() enregistre 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, il fonctionne comme NoteForm : une branche pour la requête POST, une autre pour le formulaire vide.
Défi
Facile- Une page
/signup/nomméesignupaffiche unUserCreationForm. Son modèle,notes/signup.html, est prêt. - Une inscription valide crée le compte et redirige vers la page de connexion.
- Dans l’en-tête, à côté de
Log in, un lienSign up.
Clique sur Exécuter, ouvre /signup/, crée un compte, 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