صفحة الملف الشخصي
جزء من قسم المستخدمون والحسابات في رحلة Django على Coddy. الدرس 14 من 16.
في هذا الفصل، ستضيف ميزات باستخدام ما تعرفه، مع مساعدة أقل. أولًا، صفحة خاصة بك: من سجّل الدخول، وكم ملاحظة كتب. كل ما تحتاج إليه موجود لدى المستخدم الذي سجّل الدخول: اسم المستخدم وملاحظاته من خلال related_name في حقل المالك.
لعرض عدد الصفوف، اطلب من قاعدة البيانات حساب العدد. في موقع مكتبة، ينفّذ author.books.count() استعلام SELECT COUNT(*) واحدًا. تعطي len(author.books.all()) العدد نفسه، لكنها تحمّل كل كتاب أولًا.
في الإنجليزية، تحتاج إلى 1 book لكن 2 books. كما في القسم الأول، يضيف المرشّح pluralize حرف s ما لم يكن العدد 1: book{{ count|pluralize }}. وتوضع نهاية أخرى بين علامتي اقتباس: box{{ count|pluralize:"es" }}.
التحدي
متوسطأضف صفحة للملف الشخصي.
- في
notes/views.py، اكتبprofile: اعرضnotes/profile.htmlمع عدد ملاحظات المستخدم. - في
notes/urls.py، أضفprofile/بالاسمprofile. - أنشئ
profile.htmlممتدًا منnotes/base.html. اعرض اسم المستخدم وحده داخل<h1>، ثمYou have 2 notes.استخدمpluralizeبحيث تظهر ملاحظة واحدة هكذا:You have 1 note. - في
base.html، اربطProfileبها.
بصفتك ada، انقر على Profile: You have 2 notes.
جرّب بنفسك
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})
جميع دروس المستخدمون والحسابات
تدرّب بنفسك: Playground لـ Django