Menu
CoddyTech

Đăng nhập sau khi đă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 5 trên 16.

Người dùng mới đăng ký, rồi phải nhập lại mật khẩu họ vừa chọn vài giây trước trên trang đăng nhập. View có thể tự đăng nhập cho họ.

login(request, user) từ django.contrib.auth bắt đầu một phiên cho người dùng bạn truyền vào, chính là phiên mà LoginView bắt đầu sau khi kiểm tra mật khẩu. login() không kiểm tra gì, vì vậy chỉ gọi hàm này cho người dùng mà code của bạn đã xác thực. Một trang web trò chơi đăng nhập cho người chơi khi họ mở liên kết trong email chào mừng:

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")

Trong view đăng ký, người dùng đáng tin cậy là người dùng mà form.save() trả về.

challenge icon

Thử thách

Dễ

Trong signup (notes/views.py), sau khi lưu biểu mẫu, hãy đăng nhập cho người dùng mới rồi chuyển hướng đến notes:list thay vì login. Nếu biểu mẫu bị từ chối, sẽ không có ai được đăng nhập.

Tạo tài khoản tại /signup/: phần đầu trang hiển thị Signed in as và tên của bạn. Nếu tên đã có người dùng, chẳng hạn như ada, hệ thống sẽ báo lỗi.

Tự làm thử

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})
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Người dùng và tài khoản

Tự luyện tập: Playground Django