지금까지 파이썬을 설치하는 것부터 장고의 URL과 View에 대해서 실습을 하고 공부를 해보았다. 이러한 과정이 나중 프로젝트에서 그대로 반복될 것 같다. 지금 한 것까지의 과정을 그림으로 살펴보면 아래와 같다.
1 : 브라우저에서 로컬 서버로 위와 같은 페이지를 요청을 했다.
2 : urls.py 파일에서 /pybo URL 매핑을 확인하고 Views.py 파일의 index 함수를 호출 했다.
3 : 호출한 결과를 브라우저에 반영했다.
다음으로 넘어가기 전, config/urls.py 파일을 정리할 필요가 있다. pybo 앱과 관련된 내용은 pybo 디렉터리 아래에 위치해야 한다. 하지만 지금 구조에서는 pybo 앱 URL 매핑을 추가할 때마다 config/urls.py 파일을 수정해줘야 한다. config/urls.py는 프로젝트 전반의 URL을 관리하는 파일이기 때문에 앱별 URL 매핑은 여기에 포함되지 않는 것이 좋다고 한다. 그래서 pybo 앱 전용 URL 매핑을 config/urls.py에 계속 추가하지 않는 것이 좋다.
URL 분리
1. config/urls.py 파일 수정
from django.contrib import admin
from django.urls import path, include
from pybo import views # 이거는 삭제 해주기
urlpatterns = [
path('admin/', admin.site.urls),
path('pybo/', include('pybo.urls')),
]
pybo/ URL에 대한 매핑을 path('pybo/', views.index)에서 path('pybo/', include('pybo.urls'))로 수정을 해줬다. path('pybo/', include('pybo.urls'))은 pybo/로 시작하는 페이지를 요청하면 pybo/urls.py 파일의 매핑 정보를 읽어서 처리하라는 의미이다. 이제 pybo/question.creat, pybo/anser/create등의 pybo/로 시작하는 URL을 추가해야 할 때 config/urls.py 파일을 수정할 필요 없이 pybo/urls.py 파일만 수정해주면 된다.
쉽게 말해서 페이지 이동을 해주기 위해서 URL을 분리 해주는 것이다. URL 분리를 해서 프로젝트 구조를 정리해주고, 각 앱이 독립적으로 동작할 수 있도록 유지 보수성을 높일 수 있다.
2. pybo/urls.py 파일 생성해주기 (pybo 디렉터리에 urls.py 파일 생성 해주기)
파일이름 : projects/mysite/pybo/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
기존 config/urls.py 파일에 설정했던 내용과 차이가 없다. path('', views.index) 처럼 pybo/가 생략된 ''가 사용되었다. 이렇게 되는 이유는 config/urls.py 파일에서 이미 pybo/로 시작하는 URL이 pybo/urls.py 파일과 먼저 매핑되었기 때문이다.
pybo/ URL은 다음처럼 config/urls.py 파일에 매핑된 pybo/ 와 pybo/urls.py 파일에 매핑된 ''이 더해져 pybo/가 된다.
config/urls.py | pybo/urls.py | 최종 URL | |
'pybo/' | + | '' | 'pybo/' |
'pybo/' | + | 'question/creat/' | 'pubo/question/create/' |
위 두번째 예시처럼 pybo/urls.py 파일에 path('question/create/'...)가 URL 매핑이 추가된다면 매핑되는 최종 URL pybo/가 더해진 pybo/question/create가 된다.
'Programming > Python' 카테고리의 다른 글
[Python | Django] URL 과 뷰 (0) | 2025.01.19 |
---|---|
[Python | Django] 장고 프로젝트 생성하기 (0) | 2025.01.15 |
[Python / Django] 파이썬 가상 환경 구성 (0) | 2025.01.15 |
[Python] Python 기반 웹 페이지 mariaDB로 생성한 데이터베이스 연동 (0) | 2025.01.15 |
[Python] 람다 함수 (0) | 2024.12.29 |