๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Python - Django Framework

[Django - Airbnb ํด๋ก  ์ฝ”๋”ฉ #3] USER ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

by ์œ ์ง„์˜ 2021. 3. 18.

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์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ์˜ ์ข…๋ฅ˜๋Š” ๊ณต์‹๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ํ•„๋“œ๋“ค์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค. 

User ๋ชจ๋ธ์˜ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ ํ•„๋“œ

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 ํŒจ๋„ ์ปค์Šคํ…€์€ ๋‚˜์ค‘์— ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋Œ“๊ธ€