기록하는 개발자

[Django] 사용자 확장 본문

Web/Django

[Django] 사용자 확장

밍맹030 2021. 6. 2. 19:25
728x90

<사용자 확장>

장고에서 기본적으로 제공하는 user table의 속성에 추가로 항목을 넣고 싶을 때 form을 커스텀화 할 수 있다.

 

기존 회원 가입 시 입력 받는 내용 : username, password1, password2(재확인용)

추가로 입력 받고 싶은 항목 : nickname, location, university

 

1. models.py

from django.db import models
from django.contrib.auth.models import AbstractUser #상속 받기

class CustomUser(AbstractUser):
    nickname = models.CharField(max_length=100)
    university = models.CharField(max_length=50)
    location = models.CharField(max_length=200)



2. settings.py 설정
 - 상속 만으로 바로 사용할 수 없으므로 settings.py 에 알리기
 - ALLOWED_HOSTS 아래에 AUTH_USER_MODEL = 'account.CostomUser' 추가

DEBUG = True

ALLOWED_HOSTS = []

AUTH_USER_MODEL = 'account.CustomUser'


3. 터미널에서 python manage.py makemigrations 실행

4. 터미널에서 python manage.py migrate 실행
 *오류가 발생하는 경우
   - settings.py 의 admin 관련 부분 주석처리
   - urls.py의 admin 관련 부분 주석처리
   - python manage.py migrate 다시 실행
   - 위 주석 처리 했던 부분 주석 취소하기

<settings.py>

INSTALLED_APPS = [
    # 'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',
    'account',
]

<urls.py>
#from django.contrib import admin
from django.urls import path, include
from blog.views import *

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('', home, name="home"),


5. account app 에 forms.py 생성

 - views.py에서 UserCreationForm대신 RegisterForm 사용

from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser

class RegisterForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ['username', 'password1','password2','nickname','location','university']

<forms.py의 RegisterForm을 적용한 views.py - 회원가입 부분>

from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm #수정된 코드
from django.contrib.auth import authenticate, login, logout
from .forms import RegisterForm

def register_view(request):
    if request.method=='POST':
        form = RegisterForm(request.POST) #수정된 코드
        if form.is_valid():
            user = form.save()
            login(request, user)
        return redirect("home")

    else :
        form=RegisterForm() #수정된 코드
        return render(request, 'signup.html', {'form':form})



6. account app의 admin.py 설정
 - user 확장 시 admin으로 이동하면 user가 사라져 있는데 이를 해결 하기위해 admin 설정

from django.contrib import admin
from .models import CustomUser

admin.site.register(CustomUser)

 

Users가 잘 뜨는 것 확인 가능

- admin페이지와 signup 페이지를 통해 장고에서 기존에 제공하는 사항 이외의

  내가 추가한 nickname, university, location 항목이 생긴 것을 볼 수 있다.

728x90

'Web > Django' 카테고리의 다른 글

[Django] Paginator  (0) 2021.06.05
[Django] 로그인 및 회원가입 구현  (0) 2021.06.02
[Django] Form  (0) 2021.05.27
[Django] media  (0) 2021.05.27
[Django] static  (0) 2021.05.27