signup - pai-plznw4me/django-initializer GitHub Wiki

User Model κ³Ό Form, Model 에 λŒ€ν•œ 기본지식이 μžˆμ–΄μ•Ό ν•œλ‹€.
3κ°€μ§€ Type 으둜 λ‚˜λ‰˜μ–΄μ§„λ‹€. μžμ‹ μ΄ μ μš©ν•˜κ³  싢은 νŒŒνŠΈκ°€ μ–΄λ””μžˆλŠ”μ§€ μ•„λž˜ ν‘œλ‘œ ν™•μΈν•˜κΈΈ λ°”λž€λ‹€.

id, pw 이외에 user field attribute μ‚¬μš© user field μΆ”κ°€
Signup Basic X X
Signup Custom O X
Signup Custom with Model O O

Signup Basic

django μ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” UserCreationForm 을 μ‚¬μš©ν•˜λ©΄ user, pw 을 톡해 등둝할 수 μžˆλ‹€.
django User model fields(official)

def signup(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        result = form.is_valid()
        if form.is_valid():
            user = form.save()
            auth.login(request, user)
            return redirect('home')

    elif request.method == 'GET':
        form = UserCreationForm()
        return render(request, template_name='accounts/signup.html', context={'form': form})

    else:
        raise NotImplementedError

Signup Custom

User attribute μ—λŠ” μžˆμ§€λ§Œ UserCreateForm μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” field 을 νšŒμ›κ°€μž…μ‹œ 보여주고 μ‹Άμ„λ•Œ

class CustomUserCreationForm(UserCreationForm):
    email = forms.EmailField(max_length=200)

    class Meta:
        model = User
        fields = ('username', 'email', "password1", "password2")

def signup(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST) # <-바뀐 λΆ€λΆ„
        result = form.is_valid()
        if form.is_valid():
            user = form.save()
            auth.login(request, user)
            return redirect('home')
        else:
            return render(request, template_name='accounts/signup.html', context={'errors': form.errors})

    elif request.method == 'GET':
        form = CustomUserCreationForm() # <-바뀐 λΆ€λΆ„
        return render(request, template_name='accounts/signup.html', context={'form': form})

    else:
        raise NotImplementedError

reference

Signup Custom with Model

User attribute μ—λŠ” μ—†λŠ”field 을 νšŒμ›κ°€μž…μ‹œ 보여받고 μ‹Άμ„λ•Œ AbstractUser을 상속 λ°›μ•„ μ‚¬μš©ν•œλ‹€. AbstractUser은 AbstractBaseUser을 상속받은 클래슀인데 ν•„μš”ν•œ κΈ°λŠ₯듀을 μ–΄λŠμ •λ„ κ΅¬ν˜„ν•΄ λ†“μ•˜λ‹€.

User Model 의 field 을 ν™•μž₯ν• λ €λ©΄ User의 κΈ°λŠ₯듀을 λ‹€ 가져와야 ν•œλ‹€. 즉 상속 λ°›μ•„μ•Ό ν•œλ‹€.

λͺ©ν‘œ : User Field 에 μ‚¬λŠ” μ§€μ—­ν•˜κ³  Phone number 을 μΆ”κ°€ν•œλ‹€κ³  ν•΄λ³΄μž.

Step 1. User λͺ¨λΈ 상속받아 μƒˆλ‘œμš΄ field μΆ”κ°€ν•˜κΈ°

# accounts/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models


# Create your models here.

class CustomUser(AbstractUser):
    region = models.CharField()
    phone_number = models.IntegerField()

    def __str__(self):
        return self.username

Step 2. κΈ°μ‘΄ μœ μ € μƒˆλ‘œμš΄ ModelForm μƒμ„±ν•˜κΈ°

# accounts/forms.py
from django.contrib.auth.forms import UserChangeForm

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ('username', 'email', 'password1', 'password2') #<- User μƒμ„±μ‹œ 보여쀄 field 을 μ •μ˜ν•œλ‹€. 

Step 3. Django μ—μ„œ κΈ°μ‘΄ User 을 바라보지 μ•Šκ³  CustomUser 을 κΈ°λ³Έ User 둜 λ°”λΌλ³΄κ²Œ ν•œλ‹€.

# settings.py
...
AUTH_USER_MODEL = 'accounts.CustomUser'