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

Задание

Легко
  • После успешной регистрации новый пользователь входит в систему и попадает на /.
  • Если форма отклоняет регистрацию, никто не входит в систему.

Нажми Run, открой /signup/ и создай аккаунт: в заголовке будет написано Signed in as и твоё имя.

Попробуйте сами

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