Вход после регистрации
Часть раздела Пользователи и учетные записи путешествия по Django на Coddy. Урок 5 из 16.
Новый пользователь регистрируется, а затем ему приходится вводить на странице входа пароль, который он выбрал несколько секунд назад. Представление может само выполнить вход.
login(request, user) из django.contrib.auth начинает сеанс для переданного ему пользователя — тот же сеанс, который начинает LoginView после проверки пароля. login() ничего не проверяет, поэтому вызывай его только для пользователя, которому твой код уже доверяет. Игровой сайт выполняет вход игрока, когда тот открывает ссылку из приветственного письма:
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")В представлении регистрации доверенным пользователем является тот, которого возвращает form.save().
Задание
ЛегкоВ signup (notes/views.py) после сохранения формы выполните вход нового пользователя и перенаправьте его на notes:list, а не на login. Если форма отклонена, никто не входит в систему.
Создайте учётную запись на странице /signup/: в заголовке появится Signed in as и ваше имя. Если имя уже занято, например ada, вместо этого появится сообщение об ошибке.
Попробуйте сами
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})
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Пользователи и учетные записи
3Ваши собственные данные
У заметки есть владелецТолько мои заметкиПотренируйтесь самостоятельно: Песочница Django