๐ข ์์ํ๊ธฐ ์ ์โฆ
๐ ํ์ฅ์ด ์ ํ์ํด?
Django
์๋ ๊ถํ ๋ฐ ์ธ์ฆ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๊ณ ์๋๋ฐ์. ์ฌ์ฉ์ ์ ๋ณด๊ฐ ๋ด๊ธธ User Model
์ญ์ ์ด๋ฏธ ๊ตฌํ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ค์ ์๋น์ค์์ ์ ์ฅํด์ผ ํ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ค์ด ๋๋ถ๋ถ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํด๋น ๊ธฐ๋ฅ๋ค์ ์์ ํด์ผํ ํ์๊ฐ ์์ต๋๋ค.
์ด๊ฒ ๋ํ Django
์ ์ค๋น๊ฐ ๋์ด์์ต๋๋ค. ๋ฌด๋ ค ์์ ์ด ํ์ํ ์ ๋์ ๋ฐ๋ผ 4๊ฐ์ง๋ก ๊ตฌ๋ถ๋์ด์ ๋ง์ด์ฃ ..! ์ด 4๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํ ๊ฒ์ ์๊ธฐ์ ์ ๊ฐ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ์ผ๋ ํ์ธํ๊ณ ์ค์
๋ ์ข์ต๋๋ค!
ํด๋น ๊ธ์์๋
AbstractUser
๋ฅผ ํ์ฉํฉ๋๋ค.AbstractUser
๋Django
์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด์ User Model์ ์นผ๋ผ(๋ฐ์ดํฐ)๋ค์ ์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๐ง ํ์ฌ ์ํฉ์ ์ด๋ ์ ๊ฐ์
AbstractUser
๋ ์ฅ๊ณ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์์ ํ๋ ๊ฒ์
๋๋ค. ์ฆ User Model
์ญ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ด ์๋์ผ๋ก DB์ ํ
์ด๋ธ์ ๋ง๋ค๊ธฐ ๋๋ฌธ์ Django
๊ฐ ์ด ํ
์ด๋ธ์ ๋ง๋ค๊ธฐ ์ (migrate ์ )์! ์์
์ ํด์ผํฉ๋๋ค.
๊ทธ๋ผ ์ด๋ฏธ Django
๊ฐ ์ด๋ฏธ ํ
์ด๋ธ์ ๋ง๋ค์๋๋ฐ ์ AbstractUser
์ฌ์ฉ ์๋๋์??!?!?!๐ฑ
๊ทธ๋๋ ๊ด์ฐฎ์ต๋๋ค. ๋น์ฐํ ํ๋ก์ ํธ ์ด๊ธฐ์ ํ๋๊ฒ ๊น๋ํ์ง๋ง ๋ฐฉ๋ฒ์ ์์ฃ ! ์๋์ ์ํฉ์ ๋ฐ๋ผ ๊ตฌ๋ถ์ง์ด์ ์งํํ ๊ฒ์ด๋ ์ ๋ฐ๋ผ์ ์ฃผ์ธ์!
๊ธฐ๋ณธ์ ์ธ User Model
ย ์นผ๋ผ๋ช ์ค๋ช ํ์์ฌ๋ถ ๋ฐ์ดํฐํ์ ํฌ๊ธฐ 1 id PK O int 11 2 username ์ด๋ฆ(์ ์ฒด) O char 150 3 first_name ์ฑ X char 30 4 last_name ์ด๋ฆ X char 150 5 ์ด๋ฉ์ผ X char 254 6 password ์ํธํ๋ ๋น๋ฐ๋ฒํธ O char 128 7 is_staff admin์ ์ ๊ฐ๋ฅ ์ฌ๋ถ O bool 1 8 is_activate ๊ณ์ ํ์ฑ ์ฌ๋ถ O bool 1 9 is_superuser ๋ชจ๋ ๊ถํ ํ์ฑ ์ฌ๋ถ O bool 1 10 last_login ๋ง์ง๋ง์ผ๋ก ๋ก๊ทธ์ธํ ์๊ฐ O datetime 6 11 date_joined ๊ณ์ ์ด ์์ฑ๋ ๋ ์ง O datetime 6
User Model ํ์ฅ!
ํ ์ด๋ธ ์์ฑ์ด ์ด๋ฏธ ๋์ด ์๋ค๋ฉด (migate๋ฅผ ์ด๋ฏธ ํ ๊ฒฝ์ฐ)
- ์์ฑ๋์ด ์๋ ํ์๊ณผ ๊ด๋ จ๋ ์ฑ์ migrationsํด๋์์
__pycache__ํด๋
์__init__.py
๋ฅผ ์ ์ธํ๊ณ ๋ค ์ง์์ฃผ์ธ์.- DB์์ ์ด๋ ค์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํด ์ฃผ์ ๋ค์ ๊ณผ๊ฐํ๊ฒ
DROP
ํด ์ค๋๋ค.- ์๋ ์์ ์ ํ ๋ค์ ๋ฐฑ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ DB์ ๋ฃ์ด์ฃผ์๋ฉด ๋!
1. ์ฐ์ ์ฐ๋ฆฌ๋ง์ User Model์ ๋ง๋ค์ด ๋ด ์๋ค.
accounts
์ฑ ์์ ์๋models.py
์ ๋ค์์ ์ถ๊ฐํด ์ฃผ์ธ์.- ์์์ ์ธ๊ธํ ์นผ๋ผ์์ ์ฌ์ฉํ์ง ์์ ๋ฐ์ดํฐ๋
None
์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. (์ ๋ ์ฑ ์ด๋ฆ์ accounts, ๋ชจ๋ธ ์ด๋ฆ์ User๋ก ํ๋๋ฐ ๋ฐ๊พธ์ ๋ ๋ฉ๋๋ค:)
1
2
3
4
5
6
7
from django.db import models
from django.contrib.auth.models import AbstractUser # AbstractUser ๋ถ๋ฌ์ค๊ธฐ
class User(AbstractUser):
test = models.CharField(max_length=20, default="")
test2 = models.CharField(max_length=20, null=True)
first_name = None
2. ์ด์ Django
ํํ
์ฐ๋ฆฌ๊ฐ User Model์ ๋ฐ๋ก ์ ์ํ๋ค๊ณ ์๋ ค์ค์๋ค.
settings.py
์ ๋ค์์ ์ถ๊ฐํด ์ฃผ์ธ์.
1
AUTH_USER_MODEL = 'accounts.User'
- accounts์ฑ ํด๋ ์์ admin.py์ ๋ค์์ ์ถ๊ฐํด์ฃผ์ธ์. admin ํ์ด์ง์์๋ ํ์ธํ ์ ์์ด์ผ ํ๋๊น์
1
2
3
4
from django.contrib import admin
from .models import User
admin.site.register(User)
3. ๊ทธ๋ผ DB๋ฅผ ์์ฑํด ๋ณผ๊น์?
- ์ฝ์์ฐฝ์ ์๋์ ๊ฐ์ด ์คํํด ์ค๋๋ค.
1
2
python manage.py makemigrations
python manage.py migrate
4. ๊ด๋ฆฌ์๊ณ์ ์ ๋ง๋ค๊ณ ์์ฑ๋ DB๋ฅผ ํ์ธํด๋ณด์ธ์!
1
2
python manage.py createsuperuser
python manage.py runserver
์์ฑ์ ๋๋ค! ๐
์ด์ User Model
์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด์ Django
์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.๐๐๐๐
์ถ๊ฐ๋ก mysql์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ๊ธ์ ์ ์ฅํ ๋ charset ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ DB์์ฑ์ utf8๋ก ๊ผญ ์ค์ ํด ์ฃผ์ธ์!