여름의 서재
[Django] User model 커스텀하기 본문
728x90
💡 User 모델을 왜 커스텀해야할까?
1. 일부 프로젝트에서는 Django의 내장 User 모델이 제공하는 인증 요구사항이 적절하지 않을 수 있음
ex) username 대신 email을 식별 토큰으로 사용하는 것이 더 적합한 사이트
2. Django는 기본 사용자 보델이 충분하더라도, 커스텀 유저 모델을 설정하는 것을 강력하게 권장!
(프로젝트에서 첫 migrations, migrate를 하기 전에 커스텀 유저 모델을 만들어 놔야함!! 중간에 변경 X)
🔧 Custom User 모델 만들기
1. accounts/models.py
: AbstractUser을 상속받아 커스텀 User 모델을 만든다.
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass
2. settings.py
: django가 내가 새로 만든 커스텀 User 모델을 사용하도록 AUTH_USER_MODEL을 변경해준다.
AUTH_USER_MODEL = 'accounts.User'
3. accounts/admin.py
: admin site에 커스텀 User 모델을 등록한다.
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
# Register your models here.
admin.site.register(User, UserAdmin)
4. accounts/views.py
: signup, update 함수에서 UsercreationForm과 UserchangeForm을 사용하고 있다면, 커스텀 User 모델을 이용해 커스텀 form을 만들어서 바꿔줘야 한다.
( UsercreationForm과 UserchangeForm은 기존의 User 모델을 사용하는 form이기 때문!)
# accounts/forms.py
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from django.contrib.auth import get_user_model
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = get_user_model()
fields = ('email', 'first_name', 'last_name',)
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = get_user_model()
fields = UserCreationForm.Meta.fields + ('email',)
-> 이때! User 모델을 직접 참조하지 않고 get_user_model()을 이용해야 함!!
# accounts/views.py
@require_http_methods(['GET', 'POST'])
def signup(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
return redirect('articles:index')
else:
form = CustomUserCreationForm()
context = {
'form': form,
}
return render(request, 'accounts/signup.html', context)
@login_required
@require_http_methods(['GET', 'POST'])
def update(request):
if request.method == 'POST':
form = CustomUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect('articles:index')
else:
form = CustomUserChangeForm(instance=request.user)
context = {
'form': form,
}
return render(request, 'accounts/update.html', context)
'Skill > Django' 카테고리의 다른 글
[Django] 댓글 기능 구현하기_Comment (0) | 2021.10.22 |
---|---|
[Django] 게시글에 User 정보 넣기_Article-User (0) | 2021.10.22 |
[Django] Auth 정복하기(3)_Update & Delete (0) | 2021.09.26 |
[Django] Auth 정복하기(2)_Login & Logout (0) | 2021.09.26 |
[Django] Auth 정복하기(1)_Signup (회원가입) (0) | 2021.09.26 |
Comments