Study Anything ๐ง
[Django] ๊ธฐ๋ณธ ๊ฐ๋ (์ฑ, ๋ชจ๋ธ, ๊ด๋ฆฌ์) ๋ณธ๋ฌธ
์ฐธ๊ณ : https://wikidocs.net/73306
(1) ์ฑ
์ฅ๊ณ ์์๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด '์ฑ'์ด๋ผ๋ ํ์์ ์ฌ์ฉํ๋ค.
ํ๋ก์ ํธ์ ์ฑ์ ๋ง๋๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
(mysite) C:\(์๋ต)\DjangoProj\mysite>django-admin startapp myapp #์ฑ ์ด๋ฆ: myapp
์ฑ์ด ์์ฑ๋์์ผ๋ ํ์ํ ๋ด์ฉ๊ณผ ๊ตฌํํ ๊ธฐ๋ฅ์ IDE์์ ์์ฑํ๊ณ ๊ฐ๋ฐ์๋ฒ๋ฅผ ๊ตฌ๋ํ ๋ค์
์ฃผ์ ๋ค์ '/myapp' ๋ฅผ ๋ถ์ด๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ๊ตฌํ๋ ์น ํ์ด์ง๊ฐ ๋์์ง๋ค.
ํด๋น ํ์ด์ง๊ฐ ์ ๋๋ก ์๋ํ๋ ค๋ฉด 'ํ๋ก์ ํธ/config/urls.py' ์ url ๋งคํ์ ์ถ๊ฐํด์ผ ํ๋ค.
(...)
urlpatterns = [
(...)
path('myapp', ํจ์๋ช
)
(...)
]
(...)
๋ค์๊ณผ ๊ฐ์ด ๋งคํ์ ์ถ๊ฐํ๋ฉด 'http://์ฃผ์/myapp/' url ์ด ์์ฒญ๋์์ ๋ ๋ค์ ์ฐ๊ฒฐ๋ ํจ์๋ฅผ ์คํํ๋ค.
์นํ์ด์ง๋ฅผ ๋ณด์ด๊ธฐ ์ํด์ 'ํ๋ก์ ํธ/์ฑ/views.py' ํ์ผ์ index ํจ์๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํ์.
์ด ๊ฒฝ์ฐ url ์ ์คํํ์ ๋ urls.py ํ์ผ์์ 'myapp/' ๊ณผ ๋งคํ๋ ํจ์ 'views/index' ๋ฅผ ์ฐพ์ ์คํํ๊ฒ ๋๋ค.
์ด ํ๋ฆ์ ๋ค์ ๊ทธ๋ฆผ์ ๋ฐ๋ฅธ๋ค.
(2) ๋ชจ๋ธ
์น ํ์ด์ง๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด DB๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ ์ฅ๊ณ ์์๋ ์ด ๊ธฐ๋ฅ๋ ์ฝ๊ฒ ์ ๊ณตํ๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ DB ์์ฑ์ ์ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผ ํ๋๋ฐ ์ฅ๊ณ ์์๋ ์ฟผ๋ฆฌ ์์ฑ์ ํ์ง ์์๋ ๋๋ค.
์ด๊ฒ์ ORM ๋๋ถ์ธ๋ฐ, ORM์ 'Object Relational Mapping' ์ด๋ผ๋ ๋ป์ผ๋ก,
DB์ ํ ์ด๋ธ๋ค์ ๋ชจ๋ธํํด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ํ์๊ฐ ์๋ค.
์ฐธ๊ณ ์๋ฃ์์๋ sqlite3 ๋ฅผ ์ฌ์ฉํ๋ค.
๋จผ์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง๋๋๋ฐ, ๋ชจ๋ธ์ ํ์ํ ์์ฑ๊ณผ ๋ฐ์ดํฐํ์ ์ ์ ํ๋ค.
๊ทธ ํ์ 'ํ๋ก์ ํธ/myapp/models.py' ํ์ผ์ ๋ชจ๋ธ์ ์ ์ํ๋ค.
๋ฐ์ดํฐํ์ ์ ๋ค์ ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
https://docs.djangoproject.com/en/3.0/ref/models/fields/#field-types
๋ชจ๋ธ ์์ฑ์ด ๋๋๋ฉด 'config/settings.py' ํ์ผ์์ ๋ด ์ฑ์ ์ถ๊ฐํ๊ณ migrate ๋ช ๋ น์ ์ํํ๋ค.
๋ชจ๋ธ์ด ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ migrate ๋ช ๋ น์ ๋ฐ๋ก ์คํํ๋ ๊ฒ์ด ์๋ makemigrations ๋ช ๋ น์ ๋จผ์ ์ํํ๋ค.
migrate ๋ช ๋ น์ด๋ฅผ ์ํํ๋ฉด ๊ด๋ จ ๋ด์ฉ์ด ์ด๋ํด ๋ด ์ฑ์ ์ ์ฉ๋๋ค.
(mysite) c:\(...)\DjangoProj\mysite>python manage.py makemigrations
(mysite) c:\(...)\DjangoProj\mysite>python manage.py migrate
๋ชจ๋ธ์ด ์ ์ฉ๋๊ณ ๋๋ฉด ์ฅ๊ณ ์ ธ์ ํตํด ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์๋ค.
์ฅ๊ณ ์ ธ๋ก ์ง์ ํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
(mysite) c:\(...)\DjangoProj\mysite>python manage.py shell
(...)
>>>
์ ธ์์ ๋ฏธ๋ฆฌ ์์ฑํ ๋ชจ๋ธ์ ์์ฑ์ ๊ณ ๋ คํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
# ์์
>>> (ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import)
>>> q = Question(subject='pybo๊ฐ ๋ฌด์์ธ๊ฐ์?', content='pybo์ ๋ํด์ ์๊ณ ์ถ์ต๋๋ค.', create_date=timezone.now())
>>> q.save()
๋ฐ์ดํฐ ์กฐํ์ ์์ , ์ญ์ ๋ ์ฐธ๊ณ ์๋ฃ์ ์์ธํ ์ค๋ช ๋์ด ์๋ค.
(3) ๊ด๋ฆฌ์
์น ํ์ด์ง๋ฅผ ์ด์ํ๋ค๋ณด๋ฉด ๊ด๋ฆฌ์์ ํ์์ฑ์ ๋๋ผ๋๋ฐ,
์ฅ๊ณ ์์๋ ๊ด๋ฆฌ์ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์, DB ๋ชจ๋ธ ๊ด๋ฆฌ ๋ฑ์ ์ฝ๊ฒ ํ ์ ์๋ค.
๊ด๋ฆฌ์ ํ์ด์ง์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ๊ณต์ ๋ฌธ์์ ์์ธํ ์๊ฐ๋์ด ์๋ค.
'์คํฐ๋ > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Django] DRF : Serializer ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, ์ ํจ์ฑ ๊ฒ์ฆ (0) | 2022.01.30 |
---|---|
[Django] DRF : REST API๋ฅผ ํตํด ์ฅ๊ณ ์ ๋ฆฌ์กํธ ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.01.29 |
[Django] DRF : ์ฅ๊ณ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ถ์ถํ๊ธฐ (0) | 2022.01.19 |
[Django] ๋ชจ๋ธ ๋ง๋ค๊ณ ํ์ด์ง์์ ์กฐํํ๊ธฐ (0) | 2022.01.13 |
[Django] ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (0) | 2022.01.05 |