USER ๋ฐ์ดํฐ ๋ชจ๋ธ๋งํ๊ธฐ
users ์ ํ๋ฆฌ์ผ์ด์ ์ models.py์ Airbnb ์ฌ์ฉ์๋ค์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ด๋นํ User ํด๋์ค๋ฅผ ์์ฑํด ์ค๋ค.
Django์์๋ ์์ฒด์ ์ผ๋ก USER ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ๊ณตํด ์ค๋ค. ์ด ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋์ง๋ง Airbnb์ USER ๋ชจ๋ธ์ด ๋๊ธฐ์ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์ปค์คํ ์ ํด์ฃผ์ด์ผ ํ๋ค.
USER MODEL ์ปค์คํ ํ๊ธฐ
1. setttings.py์ AUTH_USER_MODEL = "myapp.MyUser" ๋ฑ๋ก
2. models.py์์ Django์์ ์ ๊ณตํ๋ User ๋ชจ๋ธ(AbstractUser)์ ์์
USER Model ์ปค์คํ ์ ๊ณต์๋ฌธ์๋ฅผ ๋ฐ๋ผ์ ์งํํ์๋ค.
AUTH_USER_MODEL์๋ ํ๋ก์ ํธ์ USER ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ด๋นํ๋ ํด๋์ค๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋๋ค. ํด๋น ํ๋ก์ ํธ์ USER ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ด๋นํ๋ ํด๋์ค๋ users ์ ํ๋ฆฌ์ผ์ด์ ์ User ํด๋์ค์ด๋ฏ๋ก "users.User"๋ก ๋ฑ๋กํด์ฃผ์๋ค.
ํด๋น ํ๋ก์ ํธ์ USER ๋ฐ์ดํฐ ๋ชจ๋ธ์ Django์์ ์ ๊ณตํ๋ USER ๋ฐ์ดํฐ ๋ชจ๋ธ์ ํ๋ก์ ํธ์ ์๋ง์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ AbstratcUser ํด๋์ค๋ฅผ ์์๋ฐ์์ USER ํด๋์ค๋ฅผ ์์ฑํด์ฃผ์๋ค.
USER MODEL ๋ฐ์ดํฐ ํ๋ ์ถ๊ฐํ๊ธฐ
Django์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ํ๋์ ์ข ๋ฅ๋ ๊ณต์๋ฌธ์์์ ํ์ธํ ์ ์๋ค.
์๋์ ๊ฐ์ด ๋ฐ์ดํฐ ํ๋๋ค์ ์ถ๊ฐํด์ฃผ์๋ค.
1) ๋ฐ์ดํฐ ํ๋๊ฐ ์ ์๋๋ ค๋ฉด ๋ ์ฝ๋์ ์ด๊ธฐ ์ํ๊ฐ ์ ์๋์ด์ผ ํ๋ค.
FieldType ์ ์ธ๋ง ํด์ค๋ ๋น ๋ ์ฝ๋๋ก์จ ์ด๊ธฐ ์ํ๊ฐ ์ ์๋ ์ ์๋ค. ํ์ง๋ง DateField ๊ฐ์ ๋ช๋ช FieldType๋ค์ ๋ฐ๋ก ์ด๊ธฐ ์ํ๋ฅผ ์ ์ํด์ค์ผ ํ๋ฏ๋ก ์ต์ ์ ์ฌ์ฉํด์ค์ผ ํ๋ค. ์ด๊ธฐ ์ํ๋ฅผ ์ ์ํ๋ ๋ฐ์๋ ๋ ๊ฐ์ง ์ต์ ์ด ์กด์ฌํ๋ค.
1. default ์ธ์ : default ๊ฐ์ ์ค์ ํด ์ค๋ค.
2. null = True : ๋ ์ฝ๋๊ฐ null ๊ฐ์์ ํ์ฉํด ์ค๋ค.
2) blank = True ์ต์ ์ Admin ํจ๋์์ ํด๋น ํ๋๊ฐ ์ ๋ ฅ๋์ง ์์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ํด ์ค๋ค.
๊ฐ๋ฐ ์ค์ผ ๋๋ ํด๋น ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ค์ Admin ํจ๋์์ ์ง๊ด์ ์ผ๋ก ์ ๋ ฅํด์ค ์ ์๋ค. ์ด๋, ๋ ์ฝ๋๊ฐ ํ์์ ์ผ๋ก ์ ๋ ฅ๋์ด์ค์ผ ํ ๋ฐ์ดํฐ ํ๋์ ๊ทธ๋ฌ์ง ์์๋ ๋๋ ๋ฐ์ดํฐ ํ๋๊ฐ ์์ ์ ์๋ค. ํ์ง๋ง ๋ฐ๋ก ์ค์ ์ ์ ํด์ฃผ๋ฉด ๋ชจ๋ ํ๋๋ค์ด ์ ๋ ฅ๋์ง ์์์ ์ ์ ๋ ฅ๋์ง ์์๋ค๋ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋จ๊ฒ ๋๋ค.
3) choices ์ธ์๋ Admin ํจ๋์์ Select Box ์ญํ ์ ํ๋ค.
models.CharField()๋ html์ <select>์ ๊ฐ์ choices ์ธ์๊ฐ ์กด์ฌํ๋ค. ์ด๋, ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ์ admin ํจ๋์ ๋ณด์ผ ๋ฐ์ดํฐ ๋ ๋ค ๋ช ์๋์ด์ผ ํ๋ค. ์๋ ์์์ ๊ฐ์ด choices = LANGUAGE_CHOICES์ ํตํด ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์ฌ์ฉํ๋ ์ธ์ด๋ฅผ Select Box๋ก ์ ํํ ์ ์๊ฒ ํ์๋ค.
LANGUAGE_ENGLISH = "en"
LANGUAGE_KOREAN = "kr"
LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean"))
language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True)
๊ณต์๋ฌธ์ ์ฐธ์กฐ
LANGUAGE_CHOICES ๋ณ์์์ ๋ด๋ถ ํํ์ ์ฒซ ๋ฒ์งธ ์์๋ DB์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ์ด๊ณ , ๋ ๋ฒ์งธ ์์๋ Admin ํจ๋์ ๋ณด์ผ ๋ฐ์ดํฐ์ด๋ค.
Admin ํจ๋์์์ USER MODEL
User ํด๋์ค์ ์ปค์คํ ๋ USER ๋ฐ์ดํฐ ๋ชจ๋ธ์ admin.py์ ๋ฑ๋กํด์ค๋ค. ๋ฑ๋ก ๋ฐฉ๋ฒ์ ๊ณต์๋ฌธ์์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋์ค๋๋ฐ ์ด ์ค Register Decorator์ ์ฌ์ฉํ๋ค. ๋ํ, ๊ณต์ ๋ฌธ์๋๋ก models.ModelAdmin์ ์์๋ฐ์์ ์ฌ์ฉํ์ง ์๊ณ USER ๋ชจ๋ธ์ฉ Admin ํจ๋์ธ UserAdmin์ ์์๋ฐ์์ ์ฌ์ฉํ๋ค.
from django.contrib.auth.admin import UserAdmin
from . import models
@admin.register(models.User)
class CustomUserAdmin(UserAdmin):
pass
USER ๋ชจ๋ธ์ Admin ํจ๋ ์ปค์คํ ์ ๋์ค์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
'์น ํ๋ก๊ทธ๋๋ฐ > Python - Django Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Django - Airbnb ํด๋ก ์ฝ๋ฉ #2] Django Application ์์ฑํ๊ธฐ (0) | 2021.02.17 |
---|---|
[Django - Airbnb ํด๋ก ์ฝ๋ฉ #1] ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ํ๊ธฐ (0) | 2021.02.17 |
๋๊ธ