Djangoメモ
code:sh
pyenv local 3.10.8
pipenv --python 3
pipenv install django
pipenv run django-admin startproject config .
テンプレート設定
code:settings.py
TEMPLATES = [
{
...,
...,
},
]
メールアドレスをIDとして使う
ユーザーモデルをオーバーライドしてカスタムする。
code:user/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.contrib.auth.models import BaseUserManager
class UserManager(BaseUserManager):
def create_user(self, email, password=None, is_admin=False, is_staff=False, is_active=True):
if not email:
raise ValueError("User must have an email")
if not password:
raise ValueError("User must have a password")
user = self.model(
email=self.normalize_email(email)
)
user.set_password(password) # change password to hash
user.is_superuser = is_admin
user.is_staff = is_staff
user.is_active = is_active
user.save()
return user
def create_superuser(self, email, password=None):
user = self.create_user(
email,
password=password,
is_staff=True,
is_admin=True,
)
return user
class User(AbstractUser):
first_name = None
last_name = None
name = None
username = None
full_name = models.CharField("氏名", max_length=100)
email = models.EmailField("メールアドレス", unique=True)
# custom field
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
code:settings.py
AUTH_USER_MODEL = 'user.User'
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ちゃんと user をINSTALLED_APPSに追加するのも忘れない。
これでマイグレーションしてOK。