User 모델 만드는 네 가지 방법

TeetyWoo·2021년 10월 15일
0

Django

목록 보기
2/11

장고에서 User model를 만들 때에는, 네가지 방법이 있다

proxy 모델 사용하기

기본 매니저(objects)를 변경하거나 메서드를 추가 하는 정도의 변화 등 파이썬 수준의 동작만을 변경 하고 싶을 경우에 사용한다.
예) 관리자와 일반 유저의 행동만 다른 경우에 효율적으로 기능만 분리할 때
User모델을 상속하고, Meta Class에서 Proxy=True를 입력해서 proxy 모델 클래스인 것을 선언할 수 있다.

User 모델과 일대일관계의 프로필 테이블 추가하기

Django의 인증 시스템을 그대로 활용하고 로그인, 권한 부여 등과 상관이 없는 사용자 정보 필드를 저장하고자 할 때 사용한다.
models.Model을 상속하여 작성한 모델에, 기존 User 모델과 OneToOneField로 일대일관계를 맺어서 사용자에 관한 정보를 저장한다.

AbstractUser 모델 상속한 사용자 정의 User 모델 사용하기

User Model(로그인 인증 처리 부분 등)을 그대로 가져다 쓰는 대신 필드만 재정의 할 때 사용한다.
settings.py에 AUTH_USER_MODEL = ‘{App_name}.{model_name}’ 를 추가해주어야 한다.

AbstractBaseUser 모델 상속한 사용자 정의 User 모델 사용하기

필드를 재정의할 뿐만 아니라, User의 인증 및 권환 관리(로그인 인증 처리 절차) 등을 수정할 때 사용한다.
settings.py에 AUTH_USER_MODEL = ‘{App_name}.{model_name}’ 를 추가해주어야 한다.
Manager(기존의 objects)를 만들어서 설정해주어야한다.

#project/accounts/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class Profile(AbstractUser):
	age = models.PositiveIntegerField(help_text="User Age", blank=True, null=True)
#project/accounts/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import Profile
from .views import CreateUserForm
# Register your models here.
class UserAdmin(BaseUserAdmin):
    add_form = CreateUserForm
admin.site.register(Profile)
#project/accounts/urls.py
from django.urls import path
from accounts import views
app_name = 'accounts'
urlpatterns = [
    # /accounts/
    path('', views.home, name = 'home'),
    path('signup', views.signup, name = 'signup'),
]
#project/project/settings.py
AUTH_USER_MODEL = 'accounts.Profile'
# project/blog/models.py (User를 싹 다 Profile로 변경)
from accounts.models import Profile
# project/accounts/views.py
from django.shortcuts import render, redirect
from .models import Profile
from django.contrib.auth.forms import UserCreationForm
# Create your views here.
def home(request):
    return render(request, 'accounts/home.html’)
class CreateUserForm(UserCreationForm):
    class Meta:
        model=Profile
        fields=['username', 'email', 'age', 'password1', 'password2’]
def signup(request):
    form = CreateUserForm
    if request.method == "POST":
        form = CreateUserForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('accounts:home')
    return render(request, 'accounts/signup.html', {'form': form})

0개의 댓글

관련 채용 정보