Đăng ký
Thuộc phần Người dùng và tài khoản trong hành trình Django của Coddy. Bài học 4 trên 16.
Chỉ ada mới có thể đăng nhập: khách truy cập không có cách nào tạo tài khoản. Django không có trang đăng ký, nhưng có biểu mẫu dành cho việc đó, UserCreationForm trong django.contrib.auth.forms.
Đây là một ModelForm dành cho User với ba trường: username, password1 và password2. Biểu mẫu từ chối tên đã được sử dụng, hai mật khẩu không khớp và mật khẩu vi phạm các quy tắc trong AUTH_PASSWORD_VALIDATORS (quá ngắn, quá phổ biến, chỉ gồm chữ số). Phương thức save() lưu mật khẩu dưới dạng mã băm, không bao giờ lưu dưới dạng văn bản thuần. Hãy thử trong thẻ Shell:
>>> 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"
FalseTrong một view, biểu mẫu hoạt động giống như NoteForm: một nhánh xử lý POST, một nhánh dành cho biểu mẫu trống.
Thử thách
DễCho phép khách truy cập tạo tài khoản.
- Trong
notes/views.py, viết một viewsignuphiển thịUserCreationFormtrongnotes/signup.html(đã sẵn sàng cho bạn). Khi biểu mẫu hợp lệ, hãy lưu biểu mẫu rồi chuyển hướng đếnlogin. - Trong
notes/urls.py, thêmsignup/với tênsignup. - Trong
base.html, thêm liên kếtSign upđến{% url 'notes:signup' %}bên cạnhLog in.
Tạo tài khoản tại /signup/, rồi đăng nhập bằng tài khoản đó.
Tự làm thử
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})
Tất cả bài học trong Người dùng và tài khoản
Tự luyện tập: Playground Django