تم تسجيل الدخول بعد إنشاء الحساب
جزء من قسم المستخدمون والحسابات في رحلة Django على Coddy. الدرس 5 من 16.
ينشئ مستخدم جديد حسابًا، ثم يضطر إلى كتابة كلمة المرور التي اختارها قبل ثوانٍ على صفحة تسجيل الدخول. يمكن لدالة العرض تسجيل دخوله بنفسها.
تبدأ login(request, user) من django.contrib.auth جلسةً للمستخدم الذي تمرّره إليها، وهي الجلسة نفسها التي تبدأها LoginView بعد التحقق من كلمة المرور. لا تتحقق login() من أي شيء، لذا لا تستدعها إلا لمستخدم سبق أن وثق به كودك. يسجّل موقع ألعاب دخول اللاعب عندما يفتح الرابط الوارد في رسالة الترحيب الإلكترونية:
from django.contrib.auth import login
def welcome(request, token):
player = get_object_or_404(Player, welcome_token=token)
login(request, player.user)
return redirect("games:lobby")في دالة العرض الخاصة بإنشاء الحساب، المستخدم الموثوق به هو المستخدم الذي تُعيده form.save().
التحدي
سهلفي signup (notes/views.py)، بعد حفظ النموذج، سجّل دخول المستخدم الجديد وأعِد توجيهه إلى notes:list بدلًا من login. النموذج المرفوض لا يسجّل دخول أيّ شخص.
أنشئ حسابًا على /signup/: سيعرض الترويس اسمك بعد عبارة Signed in as. أما الاسم المحجوز مثل ada، فستظهر رسالة خطأ بدلًا من ذلك.
جرّب بنفسك
from django.contrib.auth.forms import UserCreationForm
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})
def signup(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect("login")
else:
form = UserCreationForm()
return render(request, "notes/signup.html", {"form": form})
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المستخدمون والحسابات
تدرّب بنفسك: Playground لـ Django