장고 걸즈 튜토리얼 따라하기 6 - 장고 urls
URL이란?
URL은 웹 주소이다. 인터넷의 모든 페이지는 고유한 URL을 가지고 있어야 하고, 어플리케이션은 사용자가 URL을 입력하면 알고 있어야 한다. 장고는 URL과 일치하는 뷰를 찾기 위한 패턴들의 집합인 URLconf (URL configuration)
을 사용한다.
장고 URL 작동 방식
에디터에서 mysite/urls.py
파일을 열면 아래 내용이 보인다.
"""mysite URL Configuration
[...]
"""
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
여기서 아래 부분을 보면
url(r'^admin/', admin.site.urls),
장고는 admin/
로 시작하는 모든 URL을 뷰와 대조해 찾아낸다. 무수히 많은 URL을 모두 쓸 수는 없기 때문에 정규표현식을 쓴다.
정규표현식(Regex)
장고는 정규표현식(regular expressions)
의 줄임말인 regex
를 사용한다. URL 패턴을 만들기 위해서 사용하는 몇 가지 규칙이 있다.
- ^ : 문자열이 시작할 때
- $ : 문자열이 끝날 때
- \d : 숫자
- () : 패턴의 부분을 저장할 때
http://www.mysite.com/post/12345/
라는 사이트가 있다고 가정하면 여기서 12345
는 글 번호를 의미한다.
뷰마다 모든 글 번호를 매기기는 힘들기 때문에 정규표현식으로 ^post/(\d+)/$
라는 url 패턴을 만든다. 하나하나 자세히 살펴보면
- ^post/ : url이
post/
로 시작한다. - (\d+) : 숫자가 한 개 이상 있다. 이 숫자로 조회하고 싶은 게시글을 찾을 수 있다.
- / :
/
뒤에 문자가 있다. - $ : 마지막이
/
로 끝난다.
첫 번째 Django URL
http://127.0.0.1:8000/ 를 홈페이지 주소로 만들어 글 목록을 보이게 만들 것이다.
mysite/urls.py
파일을 깨끗한 상태로 유지하기 위해서, blog
어플리케이션에서 메인 mysite/urls.py
파일로 url들을 가져올 것이다.
먼저 주석을 삭제하고 django.conf.urls
에서 include
를 import 해서 blog.urls
를 가져오는 행을 추가한다.
xxxxxxxxxx
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('blog.urls')),
]
이렇게 하면 장고는 http://127.0.0.1:8000/ 로 들어오는 모든 접속 요청을 blog.urls
로 전송한다.
blog.urls
blog/urls.py
라는 새 파일을 생성하고 다음 코드를 추가한다.
from django.conf.urls import url
from . import views
장고의 메소드와 blog
어플리케이션에서 사용할 모든 views
를 불러오고 있다.
그 다음, 첫 번째 URL 패턴을 만든다.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
]
이제 post_list
라는 이름의 view
가 빈 URL에 할당되었다. 이렇게 되면 http://127.0.0.1:8000/ 주소로 들어왔을 때 views.post_list
를 보여주게 된다. 그리고 마지막의 name='post_list'
는 URL에 이름을 붙인 것으로 뷰를 식별하게 된다.
서버를 실행하고 http://127.0.0.1:8000/ 로 접속해보면 AttributeError가 발생하는데 이것은 post_list
라는 뷰가 아직 없기 때문에 발생하는 현상이다.