๋ชฉ์ฐจ
Django Model(๋ชจ๋ธ)
๋ชจ๋ธ์ ๊ฐ์ฒด์ ํน๋ณํ ์ข ๋ฅ์ด๊ณ , ์ด๋ฅผ ์ ์ฅํ๋ฉด ๊ทธ ๋ด์ฉ์ด DB์ ์ ์ฅ๋๋ค.
์ฅ๊ณ ๋ App์ ์งํฉ์ผ๋ก ๋ง๋ค์ด์ก๋ค๊ณ ํ ์์๋ค. ์ฆ, ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด์ฃผ์ด์ผํ๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์์ฑ
python manage.py startapp blog(app๋ช
)
django(ํ๋ก์ ํธ ์์น)
โโโ mysite
| __init__.py
| settings.py
| urls.py
| wsgi.py
โโโ manage.py
โโโ blog(App ๋๋ ํ ๋ฆฌ)
โโโ migrations
| __init__.py
โโโ __init__.py
โโโ admin.py
โโโ models.py
โโโ tests.py
โโโ views.py
์์ ๊ฐ์ ํธ๋ฆฌ๊ฐ ์์ฑ์ด ๋ ๊ฒ์ด๋ค.
์์ฑํ App์ ๋ํ์ฌ ๊ผญ ํด์ฃผ์ด์ผ ํ๋ ๊ฒ์ด ์๋๋ฐ
setting.py์์ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋กํด์ฃผ์ด์ผํ๋ค.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', (์ดํ๋ฆฌ์ผ์ด์
์ถ๊ฐ)
]
์ด ๊ณผ์ ์ ๊ฑฐ์น์ง ์์ผ๋ฉด ์ฅ๊ณ ์์ ์ดํ์ ์ธ์ํ์ง ๋ชปํ๋ค.
๋ชจ๋ธ ์์ฑ
๋ชจ๋ Model ๊ฐ์ฒด๋ blog/models.py ํ์ผ์ ์ ์ธํ์ฌ ๋ง๋ ๋ค.
์ฆ, ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ธํ์ผ์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
๋ชจ๋ธ์ class๋ฅผ ์ด์ฉํ์ฌ ์ ์ํ๋ค.
์ด ๋ชจ๋ธ์ ์์ฑ ์ฆ, ํ๋๋ง๋ค ์ด๋ค ์ข ๋ฅ์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง๋์ง ์ ์ํด์ฃผ์ด์ผํ๋ค.
ex)
from django.utils import timezone
from django.conf import settings
from django.db import models
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self): # publish ๋ฉ์๋
self.published_date = timezone.now()
self.save()
def __str__(self): # ํฌ์คํธ์ ์ ๋ชฉ ๋ฆฌํด
return self.title
๋ชจ๋ธ์ ํ๋์ ๋ํ ๋ด์ฉ์ ์๋์์ ๋ณผ ์ ์๋ค.
(https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-types)
DB์ ๋ชจ๋ธ์ ์ํ ํ ์ด๋ธ ์์ฑ
๋ชจ๋ธ์ ์์ฑ/์์ ํ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ DB์ ์ ๋ฐ์ดํธ๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
DB์์๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์
๊ผญ ์ด ๊ณผ์ ์ ๊ฑฐ์ณ์ ์ธ์์ ํ ์ ์๋๋ก ํด์ผํ๋ค.
python manage.py makemigrations blog(App๋ช
)
python manage.py migrate blog(App๋ช
)
makgemigration : ๋ชจ๋ธ ํด๋์ค๋ก๋ถํฐ ํ ์ด๋ธ ์คํค๋ง ์์ฑ, ์์
migrate : ์ค์ DB์ ํ ์ด๋ธ ์์ฑ, ์์
Django url
๋ชจ๋ ์ธํฐ๋ท ํ์ด์ง๋ ๊ณ ์ ์ url์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์์ request์ ๋ค์ด์๋ url์ ๋ถ์ํ๊ณ ๊ทธ ํจํด๊ณผ ๋งค์นญ์ ์ํจ๋ค.
์ฅ๊ณ ๋ ์ด๋ URLconf (URL configuration)๋ฅผ ์ฌ์ฉํ๋๋ฐ
์ด๋ ์ฅ๊ณ ์์ URL๊ณผ ์ผ์นํ๋ ๋ทฐ๋ฅผ ์ฐพ๊ธฐ ์ํ ํจํด๋ค์ ์งํฉ์ด๋ผ๊ณ ํ ์ ์๋ค.
mysite์ urls.py๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns์ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ ์ํ url์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์๋ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํด์ค๋ค.
from django.urls import path, include
urlpatterns = [
path('', include('blog.urls')), (app๋ช
.urls)
]
์ดํ๋ฆฌ์ผ์ด์ ์์์ url
์ด์ app ๋๋ ํ ๋ฆฌ์์ urls.py๋ฅผ ์์ฑํ๊ณ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
ex)
from django.urls import path
from . import views
urlpatterns = [
path('', views.main, name='main'),
]
์ด์ urlpatterns์ ๋ด์ฉ์ ์ถ๊ฐํ๋ฉฐ ํ ํ๋ฆฟ๊ณผ ์ฐ๊ฒฐ์ ํด์ฃผ๋๋ฐ
path๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์ ๊ตํ ์ ์๋ฅผ ์ํด์๋ re_path() ํจ์์ ์ ๊ทํํ์์ ์ฌ์ฉํ๋ค.
Django View
App์ ๋ก์ง์ ๋ฃ๋ ๊ณณ์ผ๋ก ๋ชจ๋ธ์์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ํ ํ๋ฆฟ(htmlํ์ผ)์ ์ ๋ฌํ๋ ์ญํ ์ด๋ค.
views.py์ ํจ์์ ํํ๋ก ์ ์๋ฅผ ํด์ค๋ค.
urls.py์ ์๋ views.OO ์ ํด๋นํ๋ ๋ถ๋ถ์ด ๋ฐ๋ก ์ด๊ฒ์ด๋ค.
์ฆ, ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
ex)
def main(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
return render(request, 'blog/main.html', {'posts':posts})
Django Template
์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค UI ์ฆ, htmlํ์ผ์ ์ด์ผ๊ธฐํ๋ค.
์ฅ๊ณ ์์ ํ ํ๋ฆฟ ํ์ผ์ ์ฐพ์ ๋๋ setting.py์ ๋ฑ๋ก๋์ด์๋
TEMPLATE_DIRS ๋ฐ INSTALLED_APPS์์ ์ง์ ๋ ์ฑ์ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฒ์ํ๋ค.
๋ณดํต ์ฑ ๋ด์ template ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ๊ทธ ๊ณณ์ ํ์ผ์ ๋ง๋ค์ด์ค๋ค.
'๐ | WEB DEV > Django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Django_์ฅ๊ณ ๋ถ์๊ธฐ (6)_CRUD (0) | 2022.06.30 |
---|---|
Django_์ฅ๊ณ ๋ถ์๊ธฐ (5)_ํ์ด์ง ์ด๋, ์์ธ ํ์ด์ง (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (4)_ํ ํ๋ฆฟ ๋ฌธ๋ฒ (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (3)_QuerySet (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (1)_๊ธฐ์ด (0) | 2022.06.30 |
๋๊ธ