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 et moins d’aide. D’abord, une page à toi : qui est connecté et combien de notes cette personne a écrites. Tout ce dont tu as besoin se trouve sur l’utilisateur connecté : son nom d’utilisateur et ses notes grâce au related_name du champ du 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 anglais, on écrit 1 book, mais 2 books. Le filtre de modèle pluralize ajoute un s, sauf si le nombre est 1 : book{{ count|pluralize }}. Une autre terminaison se met entre guillemets : box{{ count|pluralize:"es" }}.
Défi
MoyenAjoutez une page de profil à /profile/, nommée profile :
- Un
<h1>contenant le nom d’utilisateur. You have 2 notes.avec le propre décompte de l’utilisateur :You have 1 note.pour une note,You have 0 notes.pour aucune note.- Dans l’en-tête, après
Signed in as ..., un lienProfilevers cette page.
Cliquez sur Run et ouvrez /profile/ en tant que ada, puis en tant que bob (mot de passe coddy-pass-123).
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