Menu
CoddyTech

Đă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"
False

Trong 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.

challenge icon

Thử thách

Dễ

Cho phép khách truy cập tạo tài khoản.

  1. Trong notes/views.py, viết một view signup hiển thị UserCreationForm trong notes/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 đến login.
  2. Trong notes/urls.py, thêm signup/ với tên signup.
  3. Trong base.html, thêm liên kết Sign up đến {% url 'notes:signup' %} bên cạnh Log 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