- delete
- SQL
- 트리
- migrations
- ORM
- 쟝고
- 스택
- Article & User
- Vue
- Queue
- create
- distinct
- 완전검색
- 그리디
- outer join
- regexp
- drf
- stack
- DB
- 큐
- 백트래킹
- M:N
- 이진트리
- Tree
- count
- Django
- 통계학
- N:1
- 뷰
- update
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
데이터 분석 기술 블로그
Django에 대하여(21)_Authentication System 본문
1. Django Authentication System (인증 시스템)
Django Authentication System이란, 사용자 인증과 관련된 기능을 모아 놓은 시스템입니다.
Authentications이란, 사용자가 자신이 누구인지 확인하는 것으로 즉, 신원 확인입니다.
1.1 사전 준비
두 번째 app accounts 생성 및 등록을 해야 합니다. auth와 관련한 경로나 키워드들을 django 내부적으로 accounts라는 이름으로 사용하고 있기 때문에 되도록 'accounts'로 지정하는 것을 권장합니다.
# accounts/urls.py
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
]
# crud/urls.py
urlpatterns = [
...,
path('accounts/', include('accounts.urls')),
]
2. Custom User model
django가 기본적으로 제공하는 user model은 내장된 auth 앱의 User 클래스를 사용하기 때문에 Custom User model로 '대체'해야 합니다.
2.1 내장된 auth 앱
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
2.2 User 클래스를 대체하는 이유
- 우리는 지금까지 별도의 User 클래스 정의 없이 내장된 User 클래스를 사용했습니다.
- 별도의 설정 없이 사용할 수 있어 간편하지만, 개발자가 직접 수정할 수 없는 문제가 존재합니다.
https://github.com/django/django/blob/main/django/contrib/auth/models.py#L405
2.3 대체하기
AbstractUser를 상속받는 커스텀 User 클래스를 작성합니다. 기존 User 클래스도 AbstractUser를 상속받기 때문에 커스텀 User 클래스도 기존 user 클래스와 완전히 같은 모습을 가지게 됩니다.
# accounts/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
django 프로젝트가 사용하는 기본 User 모델을 우리가 작성한 User 모델로 지정합니다. 수정 전 기본 값은 'auth.User'입니다.
# settings.py
AUTH_USER_MODEL = 'accounts.User'
기본 User 모델이 아니기 때문에 등록하지 않으면 admin site에 출력되지 않습니다.
# accounts/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
주의!! 프로젝트 중간에 AUTH_USER_MODEL을 변경 할 수 없습니다. 이미 프로젝트가 진행되고 있을 경우 데이터베이스 초기화 후 진행해야 합니다.
프로젝트를 시작하며 반드시 User 모델을 대체해야 합니다.
- Django는 새 프로젝트를 시작하는 경우 비록 기본 User 모델이 충분하더라도 커스텀 User 모델을 설정하는 것을 강력하게 권장하고 있습니다.
- 커스텀 user 모델은 기본 User 모델과 동일하게 작동 하면서도 필요한 경우 나중에 맞춤 설정할 수 있기 때문입니다.
단, User 모델 대체 작업은 프로젝트의 모든 migrations 혹은 첫 migrate를 실행하기 전에 이 작업을 마쳐야 합니다.
참고
1. github 코드 참고
- AuthenticationForm() https://github.com/django/django/blob/main/django/contrib/auth/models.py#L199
- AuthenticationForm의 get_user 인스턴스 메서드 https://github.com/django/django/blob/main/django/contrib/auth/models.py#L269
2. User 모델 상속 관계
3. 'AbstractUser' class
4. Abstract base classes (추상 기본 클래스)
5. 유저 모델 대체하기 Tip
'백엔드' 카테고리의 다른 글
Django에 대하여(23)_Logout (0) | 2024.04.14 |
---|---|
Django에 대하여(22)_Login (0) | 2024.04.13 |
Django에 대하여(20)_쿠키 (0) | 2024.04.11 |
Django에 대하여(19)_HTTP (0) | 2024.04.10 |
Django에 대하여(18)_Media files (0) | 2024.04.09 |