Model in Django
Django ๊ธฐ๋ณธ ํ๋ฆ
url
์ ์ ์ํ๋คurls.py
๋ ์ด์ ํ๋ค!
views.py
์ ์คํํ ํจ์๋ฅผ ๋ง๋ ๋ค๋ฐํํ
html
๋ฅผ ๋ง๋ ๋ค
Django project / app ์ค์
Django๋ ํ๋์ project๊ฐ ๋ณต์์ app์ ๊ฐ์ง๋ ๊ตฌ์กฐ๋ก ๋์ด์๋ค
๊ฐ๊ฐ์ app๋ค์ MTV pattern์ ๊ฐ๊ณ ์๋ค
๋ค์ค app์ผ๋ก ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ ์ด๋ฆ ์ค๋ณต์ด ๊ฐ๋ฅํ์ฌ
template/{app์ด๋ฆ}/{}.html
์ผ๋ก ๊ตฌ์ฑํ๋คwhy?
๊ฐ๋ณ app์ ์์ฑ๋ templates folder์ ํ์ directory๋ template file๋ก ํ์ฉ๋๋ค (default)
Django๋ template file์ ํ์ํ๋ ๊ณผ์ ์์
settings.py
์DIR
๊ณผINSTALLED_APPS
์ ์ ์ธ ์์์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฆ ์ค๋ณต์ ๋ง๊ณ ์ template ๋ฐ์ app ์ด๋ฆ๊ณผ ๋์ผํ folder๋ฅผ ๋๋ค
1. Project ์์ฑ
2. Project ๊ธฐ๋ณธ ์ค์ - settings.py
settings.py
3. app ์์ฑ (articles)
app์ด๋ฆ์ ์ผ๋ฐ์ ์ผ๋ก ๋ณต์ํ์ผ๋ก ๊ตฌ์ฑ๋๋ค
app ๋ฑ๋ก
settings.py
4. urls.py
์์ฑ
urls.py
์์ฑํ๋ก์ ํธ ํด๋
๊ฐ๋ณ app
MTV์ ์ญํ
view
url
request (์์ฒญ ๊ด๋ จ ์ ๋ณด)
return render()
Template
html
DTL
๋ฐ๋ณต / ๋ณด๊ฑด /ํํฐ
Model
DB
Model in Django
Model
: Data์ ๋ํ ๋จ์ผ ์ ๋ณด ์์ค
Migrations
: ๋ชจ๋ธ์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ
Migration ํ๋ฆ
Model ์์ฑ/์์ /์ญ์ ๋ฑ
migration
ํ์ผ ์์ฑmigration file์ model์ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ๋กํ๊ณ , database์ ๋ฐ์ํ๊ธฐ ์ํ ์ฝ๋๋ค๋ก ๊ตฌ์ฑ๋๋ค
migration file์ database scheme๋ฅผ ์ํ
๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ด๋ผ๊ณ ์๊ฐํ์! ->git
migrate
๋ฅผ ํตํ database์ ์ ์ฉ
Model
Migration
ORM (Query mtehods, QuerySet API)
MTV pattern์์ ๋ฐ์ดํฐ ๊ด๋ฆฌ
Model๋ก ์ ์๋ db schema๋ฅผ ๋ฐ์
db๋ฅผ ์กฐ์ํ๋ query๋ฌธ (python ๊ฐ์ฒด ์กฐ์์ผ๋ก ๊ฐ๋ฅํ๋ค)
Model ํ์ฉ
1. model ์ ์
models.py
models.Model
์ ์์๋ฐ์ class๋ฅผ ์์ฑํ๋ค์์ฑ์ผ๋ก๋ ๋ด๊ฐ ๊ตฌ์ฑํ๊ณ ์ถ์ table์ column์ ์ด๋ฆ์ ์ง์ ํ๊ณ , data type์ ๋ง์ถฐ์ field๋ฅผ ์ ์ํ๋ค
id ํ๋๋ ์๋์ ์ผ๋ก pk ๊ฐ์ผ๋ก ์์ฑ๋๋ค.
์์์ ์ ์๋ ํ๋์ ์ต์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
CharField
:max_length
: ํ์
DateTimeField
auto_now_add
: (์ ํ) ์์ฑ์์๋ง ์๋์ผ๋ก ํด๋น ์๊ฐ ๊ฐ ์ค์ auto_now
: (์ ํ) ์์ ์๋ง๋ค ์๋์ผ๋ก ํด๋น ์๊ฐ ๊ฐ ์ค์
์ด์ธ์ ํ๋๋ https://docs.djangoproject.com/ko/2.1/ref/models/fields/#field-types ๋งํฌ์์ ํ์ธ!
CharField
vs TextField()
CharField
vs TextField()
: ์ค์ ๋ก <form>
tag๋ก data๋ฅผ ๋ฐ์๋ <input>
์ผ๋ก ๋ฐ์ ์ง <textarea>
๋ก ๋ฐ์์ง์ ๋ฐ๋ผ ์ ํํ๊ธฐ
2. migration
Migrations are Djangoโs way of propagating changes you make to your models (adding a field, deleting a model, etc.) into your database schema. ๋ง์ด๊ทธ๋ ์ด์ ์ django์์ ๋ชจ๋ธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ฐ์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
2-1. makemigrations
์ ์๋ model์ database์ ๋ฐ์ํ๊ธฐ ์ํด์๋ migration ๋ช ๋ น์ด๋ฅผ ํตํด migration file์ ์์ฑํ๋ค
๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ๋ชจ๋ธ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ๋กํ๋ฉฐ, app ๋ณ๋ก ์๋ migrations/ ํด๋์ ๊ธฐ๋ก๋๋ค. ์ต์ด์ 0001_initial.py ๋ผ๋ ํ์ผ์ด ์์ฑ๋์ด ์์ ๊ฒ์ด๋ค.
migration file์ model์ ๋ณ๊ฒฝ์ฌํญ์ ๊ด๋ฆฌํ๋ค
Modeling ํ ๋ด์ฉ์ db์ ๋ฐ์ ํ ์ค๋น๋ฅผ ํ๋ ๊ฒ!
2-2. migrate
์์ฑ๋ migration file์ database์ ๋ฐ์ํ๊ธฐ ์ํ ๋ช ๋ น์ด
์์ ๊ฐ์ด ๋ง์ ๋ณด์ด๋ ๊ฒ์ django๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฉํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ๊น์ง ๋ฐ์๋์๊ธฐ ๋๋ฌธ์ด๋ค
์์ผ๋ก๋ ํ๋ก์ ํธ ์์ฑ๊ณผ ๋์์
python manage.py migrate
๋ฅผ ํ์!
Migration Flow
๋ง์ด๊ทธ๋ ์ด์ ์์ฑ
๋ง์ด๊ทธ๋ ์ด์ DB ๋ฐ์ ์ฌ๋ถ ํ์ธ
๋ง์ด๊ทธ๋ ์ด์ ์ ๋์๋๋ SQL๋ฌธ ์ถ๋ ฅ
๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ๋ด์ฉ์ DB์ ์ต์ข ๋ฐ์
+
admin ๋ฑ๋ก
Django ORM
๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์์ CRUD(Create, Read, Update, Delete) operation ์ด๋ผ๊ณ ํ๋ค.
ORM (Object Relational Mapping)
DB์ OOP language ๊ฐ์ ํธํ๋์ง ์๋ data๋ฅผ ๋ณํํ๋ programming ๊ธฐ๋ฒ
ORM์ db์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ object๋ก mapping ํด์ค๋ค!
Python ๊ฐ์ฒด ์กฐ์(method ํธ์ถ)์ผ๋ก db๋ฅผ ์กฐ์ํ๋ ๊ฒ!
Django shell
python interactive interpreter๋ฅผ django ํ๋ก์ ํธ์ ๋ง๊ฒ ์ธ ์ ์๋ ๊ธฐ๋ฅ
์ถ๊ฐ์ ์ธ ํจํค์ง ์ค์น๋ฅผ ํตํด ํธํ๊ฒ ํ์ฉํ ์ ์๋ค.
django-extensions ๋ django ๊ฐ๋ฐ์ ์์ด์ ์ ์ฉํ ๊ธฐ๋ฅ๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค.
ipython
์ ์ธํฐ๋ ํฐ๋ธ ์์ ์กฐ๊ธ ๋ ํธํ๊ฒ ํ์ฉํ๊ธฐ ์ํด์ ์ค์น
์ค์น ์ดํ์, settings.py ์ ๋ค์์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค. (์ฝค๋ง ์ ์)
๊ทธ๋ฆฌ๊ณ ์ด์ ๋ถํฐ๋ ์๋์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
1. ์์ฑ
2. ์กฐํ
์ ์ฒด ๋ฐ์ดํฐ ์กฐํ
๋จ์ผ ๋ฐ์ดํฐ ์กฐํ
๋จ์ผ ๋ฐ์ดํฐ ์กฐํ๋ ๊ณ ์ ํ ๊ฐ์ธ id๋ฅผ ํตํด ๊ฐ๋ฅํ๋ค.
id == pk!
์ค๋ณต์ ๋ถํํ๋ค
3. ์์
์์ ์ด ๋์๋์ง ํ์ธํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ ์กฐํ๋ฅผ ๋ค์ ํด๋ณด์
4. ์ญ์
Admin ํ์ด์ง ํ์ฉ
1. ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ
2. admin ๋ฑ๋ก
admin ํ์ด์ง๋ฅผ ํ์ฉํ๊ธฐ ์ํด์๋ app ๋ณ๋ก ์๋ admin.py์ ์ ์ ๋์ด์ผ ํ๋ค
3. ํ์ธ
/admin/ url๋ก ์ ์ํ์ฌ, ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
+
Tips
Fat Model
MVC
M (C) V
MTV
M (V) T
-> Make model fat!!!!
Last updated