Django์์ ํ๋ก์ ํธ๋ฅผ ํ ๋, ๋ด๊ฐ ๋ง๋๋ ๊ฒ์ ๊ฑฐ์ ์๊ณ ๋ค ๊ฐ์ ธ์์ ์ฐ๋ ๊ฒ์ด๋ค. ๋ชจ๋ ๊ฒ์ด ๋ชจ๋์์ ๋น๋ ค ์ฐ๋ ๊ฒ์ด์ด๊ธฐ ๋๋ฌธ์ Django์ ๊ท์น์ ์ดํดํ๋ ๊ฒ
์ด ์ค์ํ๋ค.
๊ทธ๋์ ์ ๋ฌธ ์๋ฃ๋ฅผ ์ ๋ฆฌํ๋ฉด์ ์ด๋ค flow์ธ์ง ์ตํ๊ณ , ๋ด๊ฐ ๊ถ๊ธํ๋ ๊ฐ๋ ๋ค๋ง ์ฐ์ ์ ์ผ๋ก ์ ๋ฆฌํด๋์ผ๋ ค๊ณ ํ๋ค. (์ฌ์ค tutorial์ ๋๋ฌด ๋ฐ๋ฒ์ญ ํด๋์ ๊ฐ๋ ์ ๋ค์ ์ ๋ฆฌํ๋ ๊ฑฐ...)
์ฅ๊ณ ๋ ํ์ด์ฌ์ผ๋ก ์์ฑ๋ ์คํ ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ก, ๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ ํจํด์ ๋ฐ๋ฅด๊ณ ์๋ค. ํ์ฌ๋ ์ฅ๊ณ ์ํํธ์จ์ด ์ฌ๋จ์ ์ํด ๊ด๋ฆฌ๋๊ณ ์๋ค. ๊ณ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฐ ์น์ฌ์ดํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์์ด์ ์๊ณ ๋ฅผ ๋๋ ๊ฒ์ด ์ฅ๊ณ ์ ์ฃผ๋ ๋ชฉํ์ด๋ค.
๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ๋ ์ํํธ์จ์ด ๊ณตํ์์ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์ด๋ค. ์ํค์ ๊ฐ๋ ์ค๋ช ์ ์ฐธ๊ณ ํด๋ณด์.
๋ชจ๋ธ, ๋ทฐ, ์ปจํธ๋กค๋ฌ์ ๊ด๊ณ๋ฅผ ๋ฌ์ฌํ๋ ๊ฐ๋จํ ๋ค์ด์ด๊ทธ๋จ. ์ฃผ: ๊ตต์ ์ ์ ์ง์ ์ ์ธ ๊ด๊ณ๋ฅผ, ์ ์ ์ ๊ฐ์ ์ ์ธ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค
๋ณธ๊ฒฉ์ ์ผ๋ก django๋ฅผ ์ฌ์ฉํด๋ณด์. ์๋๋ถํฐ๋ ๋ฏธ๋์ฝ๋ค3์ด ๊น๋ ค์๋ ๊ฒ์ ์ ์ ๋ก ํ๋ค. ๊ฐ์ํ๊ฒฝ์ ํจํค์ง๋ฅผ ๊น๊ณ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์๋ ์ํ๋ก ๋ง๋ค์ด๋ณด์.
๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ๋ง์ฝ ์ํ๋ ๋ฒ์ ์ ๊ฐ์ํ๊ฒฝ์ด ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ค๋ฉด, ๊ตณ์ด ์๋ก์ด env๋ฅผ ๋ง๋ค ํ์๋ ์์ ๊ฒ์ด๋ค. ๋ค๋ง ๋ฏธ๋์ฝ๋ค3์ ํตํด ๊ฐ์ํ๊ฒฝ ๋ง๋๋ ๊ฒ์ ์ต์ํด์ง๊ธฐ ์ํด์ ํ๋ก์ ํธ๋ง๋ค ํ๊ฒฝ์ ๋ง๋ค๊ณ Django๋ฅผ ์ค์นํ๋ ์ต๊ด์ ๋ค์ด๊ณ ์๋ค.
conda create -n myenv python=3.8 django
conda create -n myenv --clone base
# ์ ๊ฐ์ํ๊ฒฝ์ ๋ง๋ค ๋ ๋ก์ปฌ์ ๊ธฐ์กด ๊ฐ์ํ๊ฒฝ์ ์ค์น๋ ํจํค์ง ๋๊ฐ์ด ์ค์นํ๋ฉด์ ์์ฑํ ์ ์๋ค.
๊ฐ์ํ๊ฒฝ ์์ฑ ์ ํ์ด์ฌ ๋ฒ์ ์ ์ง์ ํด์ผ ํ๋ค. ํ์ฌ ๊ธฐ์ค์ผ๋ก ์์ ํ๋ ์ต์ ๋ฒ์ ์ 3.8์ด๋ค. ์ง์ ํ์ง ์์ผ๋ฉด conda์ ๊ธฐ๋ณธ ํฌํจ๋ ํ์ด์ฌ ๋ฒ์ ์ผ๋ก ์์ฑ๋๋ ๋ฒ์ ์ค์ ์ ๊น๋จน์ง ๋ง์!
-n ์ต์ ์ --name๊ณผ ๋์ผํ ๋ช ๋ น์ด๋ค. ๊ฐ์ํ๊ฒฝ ์ด๋ฆ์ ์ ํ๋ค.
์ํฐ๋ฅผ ๋๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ๊ฒฝ์ ํด๋น ๊ฒฝ๋ก์ ์ค์นํ ๊ฒ์ด๋ผ๊ณ ์๋ด ํด์ฃผ๋ ํ๋ฉด์ด ๋ฌ๋ค. ์ด์ ์์ผ๋ฉด y๋ฅผ ๋๋ฌ ์ต์ข ์ ์ผ๋ก ์ค์น๋ฅผ ์๋ฃํ๋ค.
## Package Plan ##
environment location: /Users/yeni/miniconda3/envs/myenv
conda env list
Proceed ([y]/n)? y
์ดํ ๋์ถฉ ์ค์น ์๋ฃ๋๋ค๋ ํ๋ฉด์ด ๋ฌ๋ค. ์ด์ conda env list ๋ช ๋ น์ด๋ฅผ ํตํด conda์ ์ค์น๋์ด ์๋ ์ฌ๋ฌ ๊ฐ์ํ๊ฒฝ์ ํ์ธํ ์ ์๋ค.
conda env list ๋ช ๋ น์ด๋ ๋ด๊ฐ ๋ง๋ env(environment) ์ฆ ๊ฐ์ ํ๊ฒฝ์ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋ค. ํ์ฑํ๋์ด์๋ ๊ฐ์ํ๊ฒฝ ์์ *์ด ํ์๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
conda env list
'''
conda environments:
base * /Users/yeni/miniconda3
test01 /Users/yeni/miniconda3/envs/test01
yeni /Users/yeni/miniconda3/envs/yeni
'''
์ฌ์ค ์ค์น ์๋ฃ ํ๋ฉด์ ๊ฐ์ํ๊ฒฝ์ ํ์ฑํํ๋ ๋ช ๋ น์ด๊ฐ ๋์ค๊ธด ํ๋ค. ํ๋ก์ธ์ค์ ๋ง์ง๋ง์ด๋ ๊ทธ๋ฅ ๋ฐ๋ก ๋ฃ์ด๋ณด์๋ค.
conda activate myenv
conda deactivate
๋ง์ฝ ๊ฐ์ํ๊ฒฝ์ ๋ง๋ค ๋ ํจํค์ง๋ฅผ ์ค์นํ์ง ๋ชปํ๋ค๋ฉด, ๊ฐ์ํ๊ฒฝ์ด ์คํ๋ ๋ค์ ์ถ๊ฐ๋ก ์ํ๋ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค. conda list ๋ช ๋ น์ด๋ฅผ ํตํด ํจํค์ง ์ค์น๊ฐ ์ ๋์ด ์๋์ง ๋ฆฌ์คํธ์์ ํ์ธํ๋ค.
conda install django # django ์ค์นํด์ฃผ์ธ์
conda list #์ค์น๋์ด ์๋ ํจํค์ง ๋ฆฌ์คํธ ๋ณด์ฌ์ฃผ์ธ์
conda activate ๊ฐ์ํ๊ฒฝ์ด๋ฆ ์ ์ ๋ ฅํ๋ฉด ์ด์ ๊ฐ์ํ๊ฒฝ์ด ๋์๊ฐ ๊ฒ์ด๋ค. ๋ก์ปฌ์์ ๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ์ ์ฅํ ๊ฒฝ๋ก์ ๋ค์ด๊ฐ์.
์ํ๋ ๊ฒฝ๋ก์ ์ ์ํด ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด, django๊ฐ ์์์ myapp์ด๋ผ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค. tree๋ฅผ ํตํด ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. (tree๋ mac์์ ๋๋ ํ ๋ฆฌ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ณด๊ธฐ ์ํด ๋ฐ๋ก ์ค์นํด์ผ ํ๋ค. brew install tree ์ ๋ ฅ ํ ์ค์นํ์!)
django-admin startproject myapp # myapp ํ๋ก์ ํธ ๋ง๋ค์ด์ค
โฏ myapp
โฏ tree
.
โโโ manage.py
โโโ myapp
โโโ __init__.py
โโโ asgi.py
โโโ settings.py
โโโ urls.py
โโโ wsgi.py
1 directory, 6 files
django project๋ฅผ ๋ง๋ค๋ฉด root directory๋ manage.py ํ์ผ์ด ์๋ ๊ณณ์ด๋ค. manage.py๊ฐ commnad line utility์ด๊ธฐ ๋๋ฌธ์, ์๋ฒ ์คํ์ ํ๋ ค๋ฉด ๊ผญ ํด๋น ๋๋ ํ ๋ฆฌ์ ์์นํด์์ด์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์.
root dir์์ polls๋ผ๋ ์ฑ์ ๋ง๋ค์ด๋ณด์. ๋ช
๋ น์ด๋ project์ ๋น์ทํ๋ค. startproject๋ฅผ startapp์ผ๋ก ๋ฐ๊พธ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด root dir์ ์๋ก์ด ํ์ผ์ด ์๊ธฐ๊ณ , project์๋ ์์๋ admin.py, apps.py, models.py
๊ฐ ์๊ธด๋ค.
app์ ๋ง๋ค๋ฉด root dir์๋ ๋ค๋ฅด๊ฒ urls.py ํ์ผ์ด ์๊ธฐ์ง ์๋๋ค. ๋ผ์ฐํ ์ ํด์ฃผ๋ ค๋ฉด ๋ด๊ฐ ํ์ผ์ ๋ฐ๋ก ๋ง๋ค์ด์ผ ํ๋ค!
โฏ python manage.py startapp polls # polls๋ผ๋ app ๋ง๋ค์ด์ฃผ์ธ์
โฏ ls # ๋ฆฌ์คํธ์ข ๋ณด์ฌ์ฃผ์ธ์
manage.py myapp polls # root dir์ polls๊ฐ ์๊ฒผ์ต๋๋ค.
โฏ cd polls # polls์ ๋ค์ด๊ฐ๋ณด์์
โฏ tree # ๋๋ ํ ๋ฆฌ๋ ์ด๋ ๊ฒ ์๊ฒผ์ด์!
.
โโโ __init__.py
โโโ admin.py
โโโ apps.py
โโโ migrations
โ โโโ __init__.py
โโโ models.py
โโโ tests.py
โโโ views.py
1 directory, 7 files
์ root directory์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ํ์ผ์ ์ญํ ์ ๋ํด ์์๋ณด์. part1์ ์ ๋ฆฌํ ๋ ํ์ง๋ง ์ดํด๊ฐ ์๊ฐ๋^^ ๋^^ ํด๋ณด์^^
__init__.py
: ์ ํ์ผ์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ๊ฐ python package๋ก ์ธ์๋์ด์ผ ํ๋ค๊ณ ์๋ ค์ค๋ค.์ฅ๊ณ ๊ณต์ ๋ฌธ์์ ์ค๋ช ์ด ๊ฐ๊ฒฐํด์ ๋ช ๊ฐ๋ ์๋ฌธ๋ ํจ๊ป ๋ฃ์๋ค.
outer myapp -
container of project
. its name doesn't matter.inner myapp - actual python package. you
need to use this name to import anything insde it
(e.g. myapp.urls)manage.py -
command line utility
. lets you interact with django project
์ ํธ๋ฆฌํฐ: ์ปดํจํฐ์์ ์ ํธ๋ฆฌํฐ๋ ์ด์์ฒด๊ณ์์ ์ ๊ณต๋๋ ๊ฒ ์ธ์ ์ถ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค.
settings.py / views.py / migrations / models.py / urls.py ์ ๋ํด์ ์์ธํ ๋งค์ฐ ์์ธํ ์ดํด๋ณด๋๋ก ํ์. ์์ผ๋ก ์์ฃผ ์จ์ผ๋๋๊น ํ์คํ ์๊ณ ๋์ด๊ฐ์๐
ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ฅ ๋จผ์ ๋ด์ผ ํ , ์ฒ์์ ๊ฐ์ฅ ์ค์ํ ํ์ผ์ด๋ค. settings, configuration ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. ๋ค์ด๊ฐ์ ์ฝ์ด๋ณด๋ฉด ์ค์ํ ์ค์ ์ ๋ด ํ๋ก์ ํธ์ ์ด๋ป๊ฒ ์ ์ฉํ ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค. ๋์ถฉ ์๋ ๋ด์ฉ์ ํฌํจํ๋ค.
๋๋ฒ๊ทธ : ๊ฐ๋ฐํ ๋๋ True ์ํ๋ก ํด์ผ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์๊ณ , ๋ฐฐํฌ ์์๋ False๋ก ๋ฐ๊พผ๋ค. ๋ฐฐํฌ ํ๋๋ฐ True ์ํ์ด๋ฉด ์๋ ๊ฒฝ๋ก์ ๋ค์ด๊ฐ์ ๋ ์๋ฌด์๊ฒ๋ ์ฝ๋์ ๊ฒฝ๋ก๋ฅผ ๊ณต๊ฐํ๋ ๋ถ์์ฌ๊ฐ ์๊ธด๋ค ๐
์ ๊ทผ๊ถํ : '*'
๋ก ์ค์ ํ๋ฉด ๋ชจ๋์๊ฒ ํ์ฉํ๊ฒ ๋๊ณ , ์๋ฌด ๊ฒ๋ ์ฐ์ง ์์ผ๋ฉด ๋๋ง ์ ๊ทผํ ์ ์๋ค. ์ฃผ์๋ ip๋์ญ์ ๋ฃ์ด ํน์ ๊ตญ๊ฐ ๋ฑ์ผ๋ก ๊ถํ์ ์ ํํ ์ ์๋ค.
INSTALLED_APPS : admin, auth, session ๋ฑ ์ฒ์ ์ค์นํ๋ฉด ๋ด์ฅ ์ฑ์ด ๊น๋ ค์๋ค. project ๋ด์ app์ ๋ง๋ค๋ฉด ํด๋น ๋ฆฌ์คํธ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
ROOT_URLCONF: localhost:8000์ host๋ก ๋ค์ด์ค๋ฉด ํด๋น urls๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
ROOT_URLCONF = 'test01.urls'
# localhost:8000(=/)๋ก ๋ค์ด์ค๋ฉด test01.urls๋ฅผ ํธ์ถํ ๊ฒ!
ํฌํ๋ฆฟ: html, css๋ฅผ ๋ฟ๋ฆฌ๋ ๊ฒ์ ๋ํ ๋ด์ฉ์ด๋ค. ์์ผ๋ก ์งํํ ํ๋ก์ ํธ์์ ํ๋ฉด ๊ตฌํ์ ๋ค๋ฃจ์ง ์์ ๊ฒ์ด๋ผ ๋์ด๊ฐ์ง๋ง, ์ถํ ์ด๋ค ๋ด์ฉ์ธ์ง ์ดํดํ๋ ๊ฒ์ด ํ์ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค: django๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ด ๋์๊ฐ ์ ์๋ค. default์ผ ๊ฒฝ์ฐ python์ ์ค์นํ ๋ ํฌํจ๋ sqlite3์ ์ฌ์ฉํ๊ฒ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ณ๊ฒฝํ ์ ์๋ค.
ํ์์กด: ํ๊ตญ์ Asia/seoul๋ก ์ค์ ํ๋ค. ๊ทธ๋ฆฌ๋์น ๊ธฐ์ค์๋ก ์ค์ ํ๋ฉด ํ์ด์ฌ์์ ํ์์กด์ ์ธ์ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ค๋ฅธ ๊ฒ์ธ์ง ์ฝ์ด๋ค์ด์ง ๋ชปํ๋ค.
๋ค๊ตญ์ด์ง์ ๋ฑ ๋ฑ ๋ฑ
๋ก์ง์ ๋ด๋นํ๋ ํ์ผ. ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค. vies.py์์ ์ด๋ค ํ๋์ ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด์ function์ด ์๋ class๋ฅผ ์ฌ์ฉํ๋ค.
๋ก์ง์ ์งค ๋์๋ ๋ด๊ฐ ๊ตฌํํ๊ณ ์ถ์ ํ๋์ด ๋ฌด์จ method์ ํด๋นํ๋์ง ์ ์์์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ์กฐํ๋ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋๊น get์ด๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด post๋ค. ๋ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๊ฑด์ง, ์์ ํ๋์ง, ์ง์ฐ๋๊ฑด์ง ๊ฒ์ธ์ง ๋ฑ ํ์์ ๋ง๊ฒ ๋ฉ์๋
๋ฅผ ์ง์ ํด์ค์ผ ํ๋ค!
๋ค์ ๋จ๊ณ์์ ๋ง์ด ๋ค๋ฃจ๊ฒ ๋ ๊ฒ์ด๋ฏ๋ก ์ฐ์ ์ด์ ๋๋ก๋ง ์ ๋ฆฌํ๊ฒ ๋ค.
class based view
๋ทฐ์๋ ํจ์ํ ๋ทฐ, ํด๋์คํ ๋ทฐ๊ฐ ์๋ค. ํจ์ํ ๋ทฐ๋ method๊ฐ ๋ญ์ง ์ ์ ์๋ ๋ฐ๋ฉด, ํด๋์คํ ๋ทฐ๋ class ์์์ get, post ๋ฑ ๋ก์ง์ ๊ตฌ๋ถํ ์ ์์ด ๋ฉ์๋๊ฐ ๋ช ํํ๋ค๋ ์ฅ์ ์ด ์๋ค.class ๋ด์์ post, get ํจ์๋ฅผ ์ค๋ณตํด์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ class๋ ํ๋์ ๋ก์ง์ ๋ํด์๋ง ์ฐ๊ณ , ๋ด๊ฐ ์ํ๋ endpoint๊ฐ ์๋ค๋ฉด class๋ฅผ ๋ง๋ค์ด urls.py์์ ๋ผ์ฐํ ํ๋ค. class ์์ as_view ํจ์๊ฐ ์์์ ๋ผ์ฐํ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํธํ๋ค.
์ฅ๊ณ ์ ํต์ฌ ๊ธฐ๋ฅ์ค ํ๋์ธ ORM๊ณผ ๊ด๋ จ๋ ํ์ผ. ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ ํ๋ค. ๋ชจ๋ธ์์ ๊ตฌ์กฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, Django๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํตํ๋ ๋ชจ๋ ๋๋ฌ์ด ์์ ์ ๋์ ํด์ค๋ค. ๊ตฌ์ฑํ๊ณ ์๋ ์์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
models.py์์ ์ ์ํ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ manage.py์ makemigrations ์ต์ ์ ํตํด ์์ฑํด ์ ์ฅํ๋ ๋๋ ํ ๋ฆฌ. ์ฌ๊ธฐ์ ๊ถ๊ธํ ๊ฒ๋ ๋ง๊ณ ์ ๋ฆฌํ ๊ฒ๋ ๋ง์์ ๋ค๋ฅธ ๊ฒ์๋ฌผ์ ๋ฐ๋ก ์ ๋ฆฌํ๋ค.
https://velog.io/@matisse/Django-migrations-์ง์ค-ํ๊ตฌ
๊ฒฝ๋ก๋ฅผ ๋ผ์ฐํ ์ ํด์ฃผ๋ ํ์ผ์ด๋ค. root dir์ urls.py ํ์ผ์ ๋ค์ด๊ฐ๋ฉด, urlpatterns = [] ๋ผ๋ ๋น ๋ฆฌ์คํธ ํ์ผ์ด ์๋ค.
localhost8000์์ ๊ฐ๊ณ ์๋ ์ฃผ์๋ /๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐ๋๋ค. ๋ฌด์กฐ๊ฑด ๋ฐ๋ ๊ณ ์ ์ฃผ์์ด๋ค. ๋ง์ฝ root dir์์ app์ url์ ์ง์ ํ๋ฉด, ๋๋จธ์ง๋ ์ฑ์ ์์ํ๊ฒ ๋๋ค.
root urls.py์์ path๋ฅผ 'user'๋ก ์ง์ ํ๊ธฐ ๋๋ฌธ์, app urls.py์์๋ path ์์ ์ฌ๋์ด์๋ฅผ ๋ถ์ฌ์ผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฃผ์๊ฐ ์ค์ ๋๋ค.
๋ง์ฝ myproject root ๋๋ ํ ๋ฆฌ์ urls ํ์ผ์์ ์ฑ์ผ๋ก ์ฐ๊ฒฐํ๋ค๋ฉด, app(์๋ ์์์์ app์ ์ด๋ฆ์ comment๋ก ๊ฐ์ )์ urls.py์์๋ ์์ /๋ฅผ ๋ถ์ฌ์ค์ผ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ผ 127.0.0.1:8000/uesr/comment ๋ก ์ฐ๊ฒฐ๋ ์ ์๋ค.
# my project root directory urls.py
urlpatterns = [ path('user', include ('user.urls')) ]
# comment urls,py
urlpatterns = [ path('/comment', CommentView.as_view()) ]
์์ฒ๋ผ app์ path์ /๋ฅผ ๋ถ์ด๊ณ runserver์์ include, slash ๊ด๋ จ ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด root directory settings.py์์ ์๋ ์ค์ ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค. (์ถ๊ฐ ํ์ง ์์ผ๋ฉด ๋ํดํธ๋ True์ด๋ค)
APPEND_SLASH = False
๋ง์ด ๊ธธ์ด์ก๋๋ฐ ๊ฒฐ๋ก ์! django์์ ์์ ํ ๋ urls์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ๊ฒ์ enpoint๋ก ๋ณด๋ฉด ๋๋ค.
http ํต์ ์์ request๋ฅผ ๋ฐ๋ ๊ณณ์ด๋ค. request์ ๋ํ response๊ฐ ์์ด์ผ ์์ ํ http ํต์ ์ด๋ผ๊ณ ํ ์ ์๋๋ฐ, endpoint๋ผ๋ ์ ์ ์ ์ ๊ทผํ๋ฉด์ ํ์์ ๋ํ ๊ฒฐ๊ณผ(POST, GET ๋ฑ)๋ฅผ ๋ฐ๊ฒ๋๋ ๊ฒ์ด๋ค. ๋ถํ์ํ end point, ์ฆ urls ๊ฒฝ๋ก์ ์ธ๋ฐ ์์ด ๋ง์ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ง ์๋ ๊ฒ์ด ์ค์ํ๋ค.
์ฌ์ ์ ์ ์:
data๋ฅผ ์ป๊ธฐ ์ํด, ํน์ API๋ฅผ ํตํด ์ด๋ค actin์ ํ ๋ ์ ๊ทผํ๋ URL. endpoint๋ ์น ์๋น์ค๋ก ๊ฐ๋ ์ฃผ์๋ ์ฐ๊ฒฐ ์ง์ ๋ฅผ ์ ์ํ๋ค.
ENDPOINT Defines the address or connection point to a Web service. It is typically represented by a simple HTTP URL string.
๐ ๊ฐ๋ฐ์๊ฐ ์ผํ๋ ์์์ ์ฅ๊ณ ๊ฐ ์ผํ๋ ์์๋ ๋ฐ๋๋ผ๊ณ ํ๋ค ๐
๋ณดํต ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋ ๊ฐ๋ฐ์๊ฐ ์ผ ํ๊ฒ ๋๋ ์์: ํ
์ด๋ธ ๋ง๋ค๊ณ ๋ก์ง ์ง์ ์ฐ๊ฒฐ ์์ผ์ฃผ๊ธฐ
models.py -> views.py -> urls
์ฅ๊ณ ํ๋ก๊ทธ๋จ์ด ์๋ํ๋ ์์: url(๊ฒฝ๋ก)์ ๋ณด๊ณ ๋ก์ง์ ํ์ธํด ํ
์ด๋ธ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
urls -> views -> models
+++ ์ถ๊ฐ: python shell์์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋ค์ด๊ฐ๋์ง ๊ฒ์ฆ์ ํ ๋ค์์, view์ ๊ฐ์ ๋ก์ง์ ์์ฑํ๋ฉด ์ข๋ค.
์์ง ์ ๋ฆฌ๊ฐ ๋ค ์ ๋์๊ธฐ ๋๋ฌธ์ ์๋ง ๊ณ์ ์์ ํ ๊ฒ ๊ฐ๋ค. ์ฐ์ ์ง๊ธ ํ๊ณ ์๋ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํด๋ณด์.
makemigrations & migrate๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์น ๋ฐ ์ ์ฉํ๋ค. ์ด์ models์์ ๋ง๋ class๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ง๋ค์ด์ง๊ณ , ๊ฑฐ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์๋ค.
๐๐