Menu
CoddyTech

صفحة الملف الشخصي

جزء من قسم المستخدمون والحسابات في رحلة 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" }}.

challenge icon

التحدي

متوسط

أضف صفحة للملف الشخصي.

  1. في notes/views.py، اكتب profile: اعرض notes/profile.html مع عدد ملاحظات المستخدم.
  2. في notes/urls.py، أضف profile/ بالاسم profile.
  3. أنشئ profile.html ممتدًا من notes/base.html. اعرض اسم المستخدم وحده داخل <h1>، ثم You have 2 notes. استخدم pluralize بحيث تظهر ملاحظة واحدة هكذا: You have 1 note.
  4. في 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