Model in Django

Django ๊ธฐ๋ณธ ํ๋ฆ„

  1. url์„ ์ •์˜ํ•œ๋‹ค

    • urls.py๋Š” ์ด์ •ํ‘œ๋‹ค!

  2. views.py์— ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค

  3. ๋ฐ˜ํ™˜ํ•  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 ์ƒ์„ฑ

$ django-admin startproject {ํ”„๋กœ์ ํŠธ ๋ช…}

2. Project ๊ธฐ๋ณธ ์„ค์ • - settings.py

3. app ์ƒ์„ฑ (articles)

  • app์ด๋ฆ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

  • app ๋“ฑ๋ก

    settings.py

4. urls.py ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ํด๋”

๊ฐœ๋ณ„ app

MTV์˜ ์—ญํ• 

view

  • url

  • request (์š”์ฒญ ๊ด€๋ จ ์ •๋ณด)

  • return render()

Template

  • html

  • DTL

  • ๋ฐ˜๋ณต / ๋ณด๊ฑด /ํ•„ํ„ฐ

Model

  • DB

Model in Django

Model

: Data์— ๋Œ€ํ•œ ๋‹จ์ผ ์ •๋ณด ์†Œ์Šค

Migrations

: ๋ชจ๋ธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

Migration ํ๋ฆ„

  1. Model ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ ๋“ฑ

  2. migration ํŒŒ์ผ ์ƒ์„ฑ

    • migration file์€ model์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๊ณ , database์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

    • migration file์€ database scheme๋ฅผ ์œ„ํ•œ ๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž! -> git

  3. 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-typesarrow-up-right ๋งํฌ์—์„œ ํ™•์ธ!

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