Đă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ề.
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})
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