Menu
CoddyTech

Вход после регистрации

Часть раздела Пользователи и учетные записи путешествия по 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().

challenge icon

Задание

Легко

В 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})
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Пользователи и учетные записи

Потренируйтесь самостоятельно: Песочница Django