Menu
CoddyTech

Une page de profil

Fait partie de la section Utilisateurs et comptes du Journey Django de Coddy. Leçon 14 sur 16.

Dans ce chapitre, tu ajoutes des fonctionnalités avec ce que tu sais déjà et moins d’aide. D’abord, une page à toi : qui est connecté et combien de notes cette personne a écrites. Tout ce qu’il faut se trouve sur l’utilisateur connecté : le nom d’utilisateur et ses notes grâce au related_name du champ propriétaire.

Pour afficher le nombre de lignes, demande à la base de données de les compter. Sur un site de bibliothèque, author.books.count() exécute un SELECT COUNT(*). len(author.books.all()) donne le même nombre, mais charge d’abord tous les livres.

En français, on écrit 1 livre, mais 2 livres. Comme dans la première section, le filtre pluralize ajoute un s sauf si le nombre est 1 : book{{ count|pluralize }}. Une autre terminaison se met entre guillemets : box{{ count|pluralize:"es" }}.

challenge icon

Défi

Moyen

Ajoute une page de profil.

  1. Dans notes/views.py, écris profile : affiche notes/profile.html avec le nombre de notes de l’utilisateur.
  2. Dans notes/urls.py, ajoute profile/ nommé profile.
  3. Crée profile.html en étendant notes/base.html. Affiche uniquement le nom d’utilisateur dans un <h1>, puis You have 2 notes. Utilise pluralize pour que le texte indique You have 1 note. pour une seule note.
  4. Dans base.html, crée un lien « Profil » vers cette page.

En tant que ada, clique sur Profil : You have 2 notes.

Essayez vous-même

from django.contrib.auth import login
from django.contrib.auth.decorators import login_not_required, permission_required
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
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.filter(owner=request.user)
    return render(request, "notes/note_list.html", {"notes": notes})


def note_detail(request, pk):
    note = get_object_or_404(Note, pk=pk, owner=request.user)
    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(commit=False)
            note.owner = request.user
            note.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, owner=request.user)
    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, owner=request.user)
    if request.method == "POST":
        note.delete()
        return redirect("notes:list")
    return render(request, "notes/note_confirm_delete.html", {"note": note})


@login_not_required
def signup(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect("notes:list")
    else:
        form = UserCreationForm()
    return render(request, "notes/signup.html", {"form": form})


def stats(request):
    if not request.user.is_staff:
        raise PermissionDenied
    context = {"user_count": User.objects.count(), "note_count": Note.objects.count()}
    return render(request, "notes/stats.html", context)


@permission_required("notes.view_note", raise_exception=True)
def all_notes(request):
    notes = Note.objects.select_related("owner")
    return render(request, "notes/all_notes.html", {"notes": notes})

Toutes les leçons de Utilisateurs et comptes

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