일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 간헐적단식이란
- 방송편성표
- 재방송
- 간단앱
- 체육시설환급
- 운동닥터
- 플러터애드몹미디에이션
- 헬스장할인쿠폰
- ecs
- codebuild
- 간단어플
- 체육시설할인쿠폰
- 간헐적단식 관리어플
- 헬스장환급
- aws
- 논현역헬스장
- 체육시설3만원
- 롤퀴즈
- 간헐적단식관리어플
- 간헐적단식어플
- 간헐적단식앱
- codepipeline
- 간헐적단식
- 간헐적단식 다이어트
- codedeploy
- 간헐적단식타이머
- 챔피언이름
- 간단
- 간헐적단식식사
- 운닥
- Today
- Total
리브어트
Django urls.py 설정 방법 본문
How to set up URL in Django
Django에서는 각 URL에 해당하는 View 클래스를 할당해서 들어오는 요청을 처리할 수 있다.
클라이언트가 특정 URL로 HTTP 요청이 들어오게 되면, Django에 프로젝트 폴더 urls.py에 등록한 view들로 요청을 처리할 수 있도록 할당한다.
간단히 그림으로 설명하면, 아래 그림과 같이 요청이 들어오고, urls.py에 등록된 url의 view 클래스의 함수로 request를 요청을 처리할 수 있도록 한다.
이제 실제 Django에서 urls.py를 어떻게 설정하고 활용하는지에 대해 설명한다.
기본적으로 Django 프로젝트를 시작하면 프로젝트 이름과 동일한 프로젝트 폴더가 생성된다. 이 폴더 내에는 settings.py와 wsgi.py와 urls.py 파일이 들어있다.
settings.py와 wsgi.py에 대해서는 추후 포스팅 예정!.
project_name/
├── __init__.py
├── settings.py
├── urls.py
├── wsgi.py
이 project_name안에 urls.py는 다음과 같이 구성되어 있다.
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
여기 urlpatterns 내부 리스트에 django 프로젝트에서 필요한 url 들을 등록하고 views class와 연결하면 된다.
실제 Django를 사용할때에는 프로젝트 폴더안에 urls.py는 각 앱들의 urls.py를 include하여서 앱 폴더 안에서 새로운 url들을 정의한다.
from django.conf.urls import (url, include)
urlpatterns = [
url(r'^app1/', include('app1.urls', namespace = 'app1')),
url(r'^app2/', include('app2.urls', namespace = 'app2'))
]
<project_name/urls.py>
from django.conf.urls import (url, include)
from .views import APP1IndexView
urlpatterns = [
url(r'^index/$', APP1IndexView.as_view(), name='app1_index'),
]
<app1/urls.py>
위의 파일과 같이 프로젝트 폴더 내의 urls.py에는 app1.urls, app2.urls를 url로 등록해놓고, 실제 app 폴더 안에 urls.py에서 URL에 해당하는 View Class를 매핑시켜준다. 이렇게 되면 /app1/index/ 의 요청은 APP1IndexView 클래스로 할당되게 된다.
또한 django url 설정의 매력은 url안에 변수를 넣어서 view class안에서 변수를 접근 가능하다!
from django.conf.urls import (url, include)
from .views import APP1IndexView
urlpatterns = [
url(r'^index/(?P<pk>[0-9]+)/$', APP1IndexView.as_view(), name='app1_index'),
]
<app1/urls.py>
class APP1IndexView(View):
def __init__(self):
pass
def get(self, request, pk):
<app1/views.py>
url 내부에 변수명과 변수의 정규식 표현을 사용하여서 view class로 해당 변수를 인자로 접근 가능하다.
예를 들면 user_id가 1인 사용자의 정보를 보고싶다면, app1/index/1/ user_id가 2인 사용자의 정보는 app1/index/2/ 와 같이 접근하여 하나의 View 클래스로 동적인 처리가 가능하도록 구현할 수 있다.
** 최근 Django 2.0에서는 url 내에 변수 설정을 획기적으로 변경했다! **
from django.conf.urls import (url, include, path)
from .views import APP1IndexView
urlpatterns = [
path('^index/<int:pk>/$', APP1IndexViews.as_view(), name='app1_index'),
]
기존의 정규식으로 사용하던 방식 말고 가독성이 좋은 형태로 탈바꿈 했다.
위의 프로젝트 url안에는 namespace, 앱 폴더 url안에는 name을 사용했는데, namespace는 앱을 구분해주는 기능이라고 생각하면 되고, 앱 url안에 name은 각 url의 이름을 붙이는 기능이라고 생각하면된다.
이 기능을 사용해서 나중에 TDD 개발과 내부에서 라우팅시에 reverse('namespace:name')으로 url로 라우팅 가능하다.
해당 포스팅은 개인적인 경험과, 공부에서 나온 지식을 바탕으로 작성되었습니다. 잘못된 부분 혹은 추가해야할 부분의 대한 피드백을 남겨주시면 감사하겠습니다.
'Tech > Django' 카테고리의 다른 글
Django Restframework ModelSerializer 활용 방법 (1) | 2017.12.07 |
---|---|
DRF(Django Rest framework) 소개 (0) | 2017.12.06 |
Django란 (0) | 2017.12.04 |