إنشاء حساب
جزء من قسم المستخدمون والحسابات في رحلة Django على Coddy. الدرس 4 من 16.
لا يمكن تسجيل الدخول إلا باستخدام ada؛ فلا توجد طريقة للزائر لإنشاء حساب. لا يحتوي Django على صفحة للتسجيل، لكنه يوفّر النموذج اللازم لها، وهو UserCreationForm في django.contrib.auth.forms.
إنه نموذج ModelForm لـ User بثلاثة حقول: username وpassword1 وpassword2. يرفض اسمًا مستخدمًا بالفعل، وكلمتي مرور مختلفتين، وكلمة مرور تخالف القواعد في AUTH_PASSWORD_VALIDATORS (قصيرة جدًا، أو شائعة جدًا، أو تتكوّن من أرقام فقط). تحفظ دالته save() كلمة المرور بعد تجزئتها، ولا تحفظها أبدًا كنص عادي. جرّبه في علامة تبويب الصدفة:
>>> from django.contrib.auth.forms import UserCreationForm
>>> form = UserCreationForm({"username": "kim", "password1": "tea-kettle-42", "password2": "tea-kettle-42"})
>>> form.is_valid()
True
>>> user = form.save()
>>> user.password == "tea-kettle-42"
Falseيعمل في العرض كما يعمل NoteForm: فرع لطلب POST، وآخر للنموذج الفارغ.
التحدي
سهل- تعرض الصفحة
/signup/المسماةsignupنموذجًاUserCreationForm. قالبهاnotes/signup.htmlجاهز. - يؤدي التسجيل الصحيح إلى إنشاء الحساب وإعادة التوجيه إلى صفحة تسجيل الدخول.
- يوجد في الترويسة، بجوار
Log in، رابطSign up.
اضغط على Run، وافتح /signup/، وأنشئ حسابًا، ثم سجّل الدخول باستخدامه.
جرّب بنفسك
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})
جميع دروس المستخدمون والحسابات
تدرّب بنفسك: Playground لـ Django