【Django】ユーザー名、パスワードを管理画面から登録する

カスタムユーザーモデルを用いて、下記の認証方法を実装した時のメモです。

  • 「ユーザー名」「パスワード」の2項目でログイン
  • ユーザー登録は管理サイトからのみ
  • メールアドレスによるアカウント登録確認は行わない
目次

前提

django-allauthを用いた認証アプリケーションを既に作成している前提で進めます。

詳しくはこちら。

結論

models.py

from django.contrib.auth.models import AbstractUser


class CustomUser(AbstractUser):
    class Meta:
        verbose_name_plural = 'CustomUser'

AbstractUserを継承したカスタムユーザーモデルを作成しています。

admin.py

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext as _


class CustomUserAdmin(UserAdmin):
    fieldsets = (
        (None, {"fields": ("username", "password")}),
        (_("Personal info"), {"fields": ("first_name", "last_name", "email")}),
        (
            _("Permissions"),
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                ),
            },
        ),
        (_("Important dates"), {"fields": ("last_login", "date_joined")}),
    )
    add_fieldsets = (
        (
            None,
            {
                "classes": ("wide",),
                "fields": ("username", "password1", "password2"),
            },
        ),
    )
    list_display = ("username", "email", )
    list_filter = ("is_staff", "is_superuser", "is_active", "groups")
    search_fields = ("username", "first_name", "last_name", "email")
    ordering = ("username",)

CustomUser = get_user_model()
admin.site.register(CustomUser, CustomUserAdmin)

UserAdminを継承した CustomUserAdmin を作成し、管理画面のカスタマイズを行なっています。

例えば下記の部分では、fieldsets をオーバーライドし、管理画面で表示させる項目をカスタマイズしています。

fieldsets = (
        (None, {"fields": ("username", "password")}),
        (_("Personal info"), {"fields": ("first_name", "last_name", "email")}),
        (
            _("Permissions"),
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                ),
            },
        ),
        (_("Important dates"), {"fields": ("last_login", "date_joined")}),
    )

settings.py

# 認証方式はユーザー名
ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_USERNAME_REQUIRED = True

# サインアップにメールアドレス確認を挟まない
ACCOUNT_EMAIL_VERIFICATION = 'none'
ACCOUNT_EMAIL_REQUIRED = False

settings.pyで上記のように設定します。

login.html

<form method="post" action="{% url 'account_login' %}">
    {% csrf_token %}
    <div>
        <label for="username"></label>
        <input type="username" name="login" autocomplete="username" required id="id_login" placeholder="username">
    </div>
    <div>
        <label for="password"></label>
        <input type="password" name="password" autocomplete="current-password" required id="id_password" placeholder="password">
    </div>
            
    {% if redirect_field_value %}
    <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}">
    {% endif %}

    <button type="submit">ログイン</button>
</form>

最低限の情報のみ記載。

まとめ

備忘録ですので最低限の情報しか記述しておりません。

参考にさせていただいたサイトはこちらです、ありがとうございます。

案件、ありますか?

「メインの仕事があるけれど、週1、2日だけできる仕事ないかな、、、」

「ある程度スキルが身に付いてはきたけど、そのスキルを活用できる場が欲しい」

なんて悩みが以前はありました。

自分で仕事を探しに行くのも大事ですが、蛇の道は蛇。その道の人に頼むことで、自分だけでは見つからないような案件に携わることができます。

IT PRO パートナーズでは、簡単に無料でアカウントを登録でき、さらにはエージェントさんに希望の働き方・案件の種類を提示することでお仕事を紹介してくれます!

登録自体も非常に簡単で、「エージェントさんとの面談を希望する」という欄にチェックをするだけで、エージェントさんから直接連絡をいただくことができます。

驚くほど簡単で正直拍子抜けしてしまいました笑

もしお仕事探しに困っておりましたら、一度登録し案件を眺めてみることをおすすめします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

勤めていた設計会社を退社し、フリーランスとして活動しています
また、趣味で主にpyhonを用いて機械学習を行なっています!
現在競艇の予測モデルの開発中です。

コメント

コメントする

目次