Django์์ ๋ค์ค ์ฑ(App)์ด๋? ๐ฒ
- Django ํ๋ก์ ํธ๋ ํ๋ ์ด์์ ์ฑ(App)์ผ๋ก ๊ตฌ์ฑ๋๋ค
- ์ฑ(App)์ด๋?: Django์์ ํน์ ๊ธฐ๋ฅ์ด๋ ๋ชจ๋์ ๊ตฌํํ ๋
๋ฆฝ์ ์ธ ๋จ์์
- ์: ์ฌ์ฉ์ ์ธ์ฆ, ๋ธ๋ก๊ทธ, ์ํ ๊ด๋ฆฌ ๋ฑ.
์ฅ์
- ๋ชจ๋ํ: ๊ธฐ๋ฅ๋ณ๋ก ์ฑ์ ๋๋์ด ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ๋์
- ์ฌ์ฌ์ฉ์ฑ: ์ฑ์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ฝ๊ฒ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํจ
- ๊ตฌ์กฐํ: ํ๋ก์ ํธ์ ์ญํ ๋ณ ๊ตฌ์ฑ์ผ๋ก ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ฆ๊ฐํ๋ค
my_project/
โโโ my_project/
โ โโโ settings.py
โ โโโ urls.py
โ โโโ ...
โโโ blog/
โ โโโ models.py
โ โโโ views.py
โ โโโ urls.py
โ โโโ ...
โโโ shop/
โ โโโ models.py
โ โโโ views.py
โ โโโ urls.py
โ โโโ ...
1. ๋ค์ค ์ฑ์์์ URL ๊ตฌ์กฐ
- Django๋ ๊ฐ ์ฑ์ด ์์ฒด์ ์ธ URL ์ค์ ์ ๊ฐ์ง ์ ์๋๋ก ์ง์ํ๋ค
- ํ๋ก์ ํธ์ urls.py๋ ๊ฐ ์ฑ์ URL์ ํตํฉ์ผ๋ก ๊ด๋ฆฌํจ
1) ํ๋ก์ ํธ์ urls.py
- ํ๋ก์ ํธ์ URL์ ์ด๊ด์ ์ผ๋ก ๊ด๋ฆฌ
- ์ฑ๋ณ๋ก URL ํจํด์ ๋ผ์ฐํ ํจ
์์
rom django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # blog ์ฑ URL ์ฐ๊ฒฐ
path('shop/', include('shop.urls')), # shop ์ฑ URL ์ฐ๊ฒฐ
]
2) ์ฑ๋ณ urls.py
- ์ฑ ๋ด์์ URL๊ณผ ๋ทฐ๋ฅผ ์ ์ํ๋ค
- ๊ฐ ์ฑ์ URL์ ์๋์ ๊ฒฝ๋ก๋ก ์์ฑํจ
`blog/urls.py`
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='blog_index'), # /blog/
path('<int:post_id>/', views.detail, name='blog_detail'), # /blog/1/
]
`shop/urls.py`
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='shop_index'), # /shop/
path('<int:item_id>/', views.detail, name='shop_detail'), # /shop/1/
]
2. URL ์ฐ๊ฒฐ ํ๋ฆ
- ์ฌ์ฉ์๊ฐ `/blog/`๋ก ์์ฒญ → ํ๋ก์ ํธ์ `urls.py`์์ `blog.urls`๋ก ์ ๋ฌํจ
- `blog/urls.py`์์ ์์ฒญ์ ๋ฐ์ ์ ์ ํ ๋ทฐ ํจ์๋ก ๋งคํ
3. ๋ค์ค ์ฑ URL ์ค๊ณ์ Best Practice
1) ๋ค์์คํ์ด์ค ์ฌ์ฉ
- URL ํจํด ์ถฉ๋ ๋ฐฉ์ง
- ๊ฐ ์ฑ์ ๊ณ ์ ํ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํจ
`blog/urls.py`
app_name = 'blog' # ๋ค์์คํ์ด์ค ์ค์
urlpatterns = [
path('', views.index, name='index'), # blog:index
path('<int:post_id>/', views.detail, name='detail'), # blog:detail
]
`๋ทฐ์์ ๋ค์์คํ์ด์ค URL ์ฌ์ฉ`
from django.urls import reverse
def some_view(request):
blog_url = reverse('blog:index') # 'blog' ๋ค์์คํ์ด์ค์ 'index' URL
2) URL ๊ตฌ์กฐ์ ์ผ๊ด์ฑ
- ์ฑ ๊ฐ์ URL ๊ตฌ์กฐ๋ฅผ ํต์ผ์ฑ ์๊ฒ ์ค๊ณํ๋ค
- ์: `/app/<resource>/<id>/`
์์
/blog/ -> blog์ ์ธ๋ฑ์ค
/blog/<post_id>/ -> ํน์ ๊ธ ๋ณด๊ธฐ
/shop/ -> shop์ ์ธ๋ฑ์ค
/shop/<item_id>/ -> ํน์ ์ํ ๋ณด๊ธฐ
3) ๊ณตํต URL ํจํด ์ฒ๋ฆฌ
- ์ฌ๋ฌ ์ฑ์์ ๋์ผํ URL ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ฉด ๋ณ๋ URL ๊ตฌ์ฑ ํ์ผ๋ก ๋ถ๋ฆฌํจ
์์ : ๊ณตํต URL ์ฒ๋ฆฌ
from django.urls import path
from . import views
urlpatterns = [
path('search/', views.search, name='search'), # /app/search/
]
4. ๋ค์ค ์ฑ๊ณผ URL ์ฐ๊ฒฐ ์ ์ฃผ์์ฌํญ
URL ์ถฉ๋ ๋ฐฉ์ง
- ๋ค์์คํ์ด์ค๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํด์ผํจ
- URL ํจํด ์ด๋ฆ์ด ๊ณ ์ ํ๋๋ก ์ค์ ํด์ผํจ
๋ผ์ฐํ ์์
- urls.py์ ์์์ ๋ฐ๋ผ URL ๋งค์นญ์ด ์งํ๋๋ฏ๋ก ์ผ๋ฐ์ ์ธ ํจํด์์ ํน์ํ ํจํด ์์ผ๋ก ์์ฑํ๋ค
ํ ์คํธ
- ๊ฐ ์ฑ์ URL ํจํด์ด ์๋ํ ๋๋ก ์๋ํ๋์ง ํ์ธํ ๊ฒ
์ ๋ฆฌ ๐งน
- ๋ค์ค ์ฑ์ ํ์ฉํ๋ฉด Django ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ํํ์ฌ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๋ค
- ๊ฐ ์ฑ์ ๋ ๋ฆฝ์ ์ผ๋ก URL๊ณผ ๋ทฐ๋ฅผ ์ ์ํ๋ฉฐ, ํ๋ก์ ํธ์ urls.py์์ ํตํฉ์ผ๋ก ๊ด๋ฆฌํจ
- ๋ค์์คํ์ด์ค๋ฅผ ํ์ฉํด ์ถฉ๋์ ๋ฐฉ์งํ๊ณ , URL ๊ตฌ์กฐ๋ ํต์ผ์ฑ ์๊ฒ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค~!
'AI ๐ค > Django โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250116] ์คํค๋ง(Schema)์ ERD(Entity-Relationship Diagram) (7) | 2025.01.16 |
---|---|
[250115] REST ์ RESTful ์ ๋ํ ์ ๋ฐ์ ์ธ ๊ฐ๋ ์ ๋ฆฌ~ (1) | 2025.01.15 |
[250110] ORM(Object-Relational Mapping)์ด๋? (0) | 2025.01.10 |
[250107] ํธ๋ ์ผ๋ง ์ฌ๋์(Trailing Slash) ๋? (0) | 2025.01.07 |
[250106] HTML ํผ(Form), ์ฟผ๋ฆฌ์คํธ๋ง(Query String), ๊ทธ๋ฆฌ๊ณ Get (0) | 2025.01.06 |