[Django] ユーザー登録とログインを同時に行う

Djangoでのユーザー登録完了と同時にログイン状態にする方法をメモ

自動的にログインしない場合の実装(ユーザー登録のみ)

from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views.generic import CreateView

class UserCreateView(CreateView):
    form_class = UserCreationForm
    template_name = "accounts/usercreate.html"
    success_url = reverse_lazy("login")

CreateViewを継承したViewで普通にユーザーを作成してログインページにリダイレクト

新規登録完了と同時にログイン状態にする実装

from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views.generic import CreateView
from django.contrib.auth import login, authenticate # 追記

class UserCreateAndLoginView(CreateView):
    form_class = UserCreationForm
    template_name = "accounts/usercreate.html"
    success_url = reverse_lazy("index") # 変更

    def form_valid(self, form): # 追記
        response = super().form_valid(form)
        username = form.cleaned_data.get("username")
        raw_pw = form.cleaned_data.get("password1")
        user = authenticate(username=username, password=raw_pw)
        login(self.request, user)
        return response

フォームへの入力の検証後、新規ユーザーがデータベースへ登録されるので、そのままフォームからユーザー名とパスワードを取り出して、ログインさせます。
その後トップページにリダイレクト

さいごに

意外と簡単に実装できました。
ログインやログアウトは最初から実装されているのに
何でこの辺の機能はデフォルトで用意されていないんでしょう?

新規登録の方法はサービスによってまちまちだからですかね?