파이썬 장고(django)를 이용해 프로젝트를 진행하는 과정에서 가장 중요한 것은 URLconf를 잘 설정하는 것이 아닐까 생각합니다. 웹앱을 이용하는 사용자의 요청에 따라 적절하게 준비된 페이지를 보여줘야만 하겠죠. 아무리 잘 만들어진 기능의 웹앱이라 해도, 사용자가 필요로하는 페이지의 기능을 보여주지 못한다면 문제가 있을 수 있습니다.
장고는 URLconf를 설정하여 http 도메인으로 들어오는 요청을 설정한 url로 연결하고, 등록된 메인 스크립트의 함수로 이어지게 됩니다. 결국, 템플릿 혹은 html 내용으로 작성된 페이지를 보여주며, javascript 혹은 파이썬 코드로 작성된 기능을 수행하고 결과를 보여주게 됩니다. 만약, URLconf의 내용이 꼬이게 된다면 개발자가 의도한 목적을 달성하기 어렵게 됩니다.
URL settings : django.urlsURLconf에 사용되는 함수들
① path()
아래에서 조금 더 자세하게 다루도록 합니다. 여기서는 대략적으로 알아볼게요. 기본적으로 사용하는 방법은 다음과 같습니다.
path( 경로, 보기, kwargs = 없음, 이름 = 없음 )
기본 사용 방법은 위의 형태를 따르게 됩니다. 여기서 urlpatterns의 예시는 다음과 같습니다.
from django.urls import include, path
urlpatterns = [
path("index/", views.index, name="main-view"),
path("bio/<username>/", views.bio, name="bio"),
path("articles/<slug:title>/", views.article, name="article-detail"),
path("articles/<slug:title>/<int:section>/", views.section, name="article-section"),
path("blog/", include("blog.urls")),
...,
]
② re_path()
🔸 기본형
re_path( 경로, 보기, kwargs = 없음, 이름 = 없음)
🔸 사용 예시
from django.urls import include, re_path
urlpatterns = [
re_path(r"^index/$", views.index, name="index"),
re_path(r"^bio/(?P<username>\w+)/$", views.bio, name="bio"),
re_path(r"^blog/", include("blog.urls")),
...,
]
③ include()
🔸 기본형
include( 모듈 , 네임스페이스 = 없음 )
include( 패턴_목록 )
include( (pattern_list , app_namespace) , 네임스페이스=None )
🔸 매개변수
⊙ module – URLconf 모듈(또는 모듈 이름)
⊙ 네임스페이스 ( str ) – 포함되는 URL 항목의 인스턴스 네임스페이스
⊙ 패턴 목록 – 반복 가능한 path()및/또는 re_path()인스턴스입니다.
⊙ app_namespace ( str ) – 포함되는 URL 항목의 애플리케이션 네임스페이스
④ register_converter()
🔸 기본형
register_converter( 변환기 , 유형_이름 )
⑤ django.conf.urlsURLconf에서 사용되는 static()
🔸 기본형
static.static( 접두사 , 보기 = django.views.static.serve , ** kwargs )
🔸 사용 예시
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
📌 참고 문헌 : django 공식 홈페이지 : https://docs.djangoproject.com/ko/4.2/ref/urls/#django.urls.path
path() 인수 : 4가지
1️⃣ path() 인수 : route
☞ url 패턴을 가진 문자열을 나타냅니다. 단순히 생각하면 개발한 웹의 url 구조를 표현하고 사용할 때 기본적으로 활용할 수 있는 부분이기도 합니다. 웹으로 요청이 들어왔을 때 urlpatterns의 첫번째 패턴부터 시작하게 됩니다. 패턴을 계속 찾으며, 요청된 URL에 대하여 패턴, 리스트의 순서대로 비교한다고 합니다. 상당힌 모호한 느낌이 들기도 하는데요. 생각보다 간단합니다. 사용자가 설정한 도메인의 뒷 부분에 집중된다는 것을 나타내고 있습니다.
## 예를 들면 다음과 같습니다.
ⓐ https://www.example.com/myapp 요청
> URLconf
> myapp/ 부분만 집중
ⓑ https://www.example.com/myapp/?page=3 요청
> URLconf
> myapp/ 부분만 집중
2️⃣ path() 인수 : view
☞ 요청에서 Django는 일치하는 패턴을 찾게 됩니다. 패턴이 찾아지면 HttpRequest 객체를 첫번째 인수로 합니다. 이때 경로에서 캡처된 값을 키워드 인수로 합니다. 해당 인수로 view 함수를 호출하게 된다고 하네요. 역시 관련 예제가 필요한 부분인 것 같습니다.
3️⃣ path() 인수 : kwargs
☞ 임의의 키워드 인수들은 사전형으로 전달되는데요. 이때 사용되는 인수라고 합니다.
4️⃣ path() 인수 : name
☞ URL에 이름을 지정하게 됩니다. 이렇게 이름을 지정하게 되면 Django에서 참조할 수 있기 때문에 URL 패턴을 수정할 때 파일 하나만 바꾸면 되는 편리함이 존재합니다.
📌 참고 문헌 : django 첫번째 앱 작성하기, part1 : https://docs.djangoproject.com/ko/4.2/intro/tutorial01/
➕) 예제에서 사용된 코드 URLconf
🔸 프로젝트 폴더(polls)에서의 urls.py 설정
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
🔸 root 폴더(mysite)에서의 urls.py 설정
# mysite/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]