Menu
CoddyTech

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"
False

Dans une vue, il fonctionne comme NoteForm : une branche pour la requête POST, une autre pour le formulaire vide.

challenge icon

Défi

Facile
  • Une page /signup/ nommée signup affiche un UserCreationForm. 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 lien Sign 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

Entraînez-vous par vous-même : Playground Django