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

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

challenge icon

Défi

Facile

Permets aux visiteurs de créer un compte.

  1. Dans notes/views.py, écris une vue signup qui affiche un UserCreationForm dans notes/signup.html (déjà prêt). Lorsque le formulaire est valide, enregistre-le et redirige vers login.
  2. Dans notes/urls.py, ajoute signup/ avec le nom signup.
  3. Dans base.html, à côté de Log in, crée un lien Sign up vers {% 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

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