다른 url도 등록해준다.
* urls.py
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.first),
path('second/', views.second),
]
second라고 하는 url에 대해서 실제로 동작할 함수를 views.py에 작성해준다.
궁금한 점
Q1은
path('second', views.second), 라고 안하고
path('second/', views.second) 라고 적는 이유는 뭘까에 대한 생각으로
아래와 같은 질문을 하게 되었다.
Q2는 html을 실행시키는 과정에서 복습을 하던 도중에
views.py와 urls.py의 역할에 대해 확실히 하고자 질문을 하게 되었다.
Q1)
urls.py에서
path('test/', myapp.views.test), 라고 설정 시
test라고 입력하면 test 함수가 실행되고
test/라고 입력시에도 동일한 결과가 뜬다.
path('test', myapp.views.test), 라고 설정 시
test라고 입력하면 Not Found가 뜨고
test/라고 입력시에도 동일한 결과가 뜬다.
링크에서 / 가 자동으로 입력되기 때문에
test/라고 설정 시에 test라고 입력이 되어도
오류가 뜨지 않는거라고 하면
test라고만 작성해도 상관없는 걸까 아니면
오류가 뜰 가능성이 있기 때문에라도 test/라고 입력을 해야할까?
Q2)
html을 연결 할 때
views.py에서는 함수를 작성하고
urls.py에서는 그 함수를 실행시키는 용도로 알아두면 될까??
Q1)
/를 입력해야 경로 설정이 정상적으로 매핑되는 것을 확인할 수 있다.
모든 url이 기본적으로 /로 끝나기 때문에
코드를 작성하는 단계에서 해당 내용이 포함하는 것이 필요해 보인다.
Q2)
views.py는
html에 보여지는 페이지에 특정 기능이나 값을 보여주기 위해 (view) 작업하는 파일이며,
urls.py는
views.py에서 보여주고자 하는 기능이 적절한 웹 페이지 경로 (path)에 연결해주는 역할을 한다.
실제로 url의 풀네임은 Uniform Resource Locator로
네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규칙이라고 한다.
따라서 views.py -> urls.py로 기능과 경로를 매치해주는 것으로 이해하면 된다.
* views.py (추가한 코드만 입력함)
def second(request):
return render(request, 'second.html')
second.html을 만들어준다.
( * myapp > templates > second.html )
<h1>second</h1>
주소 뒤에 second를 입력하면 second가 잘 뜨는 것을 확인할 수 있다.
이번에는 first와 second를 한 번 링크를 통해서 연결을 지어본다.
*first.html
<h1>first</h1>
<a href = "/second">to second page</a>
to second page라는 글귀를 두면 second라고 하는 링크로 이동하게 된다.
* second.html
<h1>second</h1>
<a href="">to first page</a>
to first page라고 하는 이 글귀를 누르면
뒤에 아무것도 입력하지 않은 url로 이동해라 라고 링크를 남겨준다.
실행하면 first 밑에 to second page 글귀 버튼이 생겨났고
버튼을 누르면 second로 이동하게 된다.
이런 식으로 url을 등록할 수 있고
url들 간 a 태그 href 속성을 통해서 자유자재로 이동할 수 있다.
url을 효율적으로 다루기
(* urls.py에서 계속 작성했다.)
예를 들어서,
장고를 이용해서 어떤 쇼핑몰을 만들었다고 가정
쇼핑몰에서 url이 많을 텐데
A ⬇
# 상품관련 rul
#127.0.0.1:8000/product/1
#127.0.0.1:8000/product/2
#127.0.0.1:8000/product/3
# ...
# 구매 후기 관련 url
#127.0.0.1:8000/board/1
#127.0.0.1:8000/board/2
#127.0.0.1:8000/board/3
# ...
지금까지 만든 url 방식으로는
어떤 url에 매칭되는 함수, 어떤 url에 매칭되는 함수 이런 식(A)으로 써줬었다.
이런식으로 url을 쭉 설계하는 것에는 한계가 있다.
⇓ ⇓ ⇓
ex)
* urls.py
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.first),
path('second/', views.second),
path('product/1/', views.second),
path('product/2/', views.second),
path('board/', views.second),
]
한눈에 들어오지 않는다.
그렇기 때문에 계층적으로 이루어진 url을 application을 이용해서
조금 더 효율적으로 관리하는 방법이 필요했다.
django.urls 안에 있는 include를 이용해서
(practice_url > practice_url > urls.py)
from django.urls import path, include
application을 이용해서 이런 식(* 위에 A로 표시 해둔 곳)으로
계층적으로 이루어진 url들을 효율적으로 관리하는 방법이 도입되었다.
예를 들어서 application을 만들 것인데,
python manage.py startapp product
1. 상품과 관련된 개발을 담당하는 장고의 작은 부분
즉, porduct라고 하는 application을 만들었다 라고 가정한다.
2. 구매 후기와 관련된 코드들만 처리해주는 모드 (장고의 작은 단위) _ board
python manage.py startapp board
→ application을 이런 식으로 2개 만들었다.
당연히 이 2개의 application은 settings.py에 등록을 해줘야 한다.
* settings.py
INSTALLED_APPS =[
생 략
'myapp', ## 이 뒤부터 추가하면 된다.
'board',
'product',
]
application 안에 urls.py 생성하기
application 즉, board 안에 인위적으로 urls.py를 하나 만들어준다.
마찬가지로 porduct application안에 urls.py를 만들어준다.
그 다음에 projdect_url 원래 있었던 urls.py에서 include를 import해주고
* urls.py
from django.contrib import admin
from django.urls import path, include
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.first),
path('second/', views.second),
path('product/', include('product.urls')), ## 추가
]
product를 갖고 있는 url을 등록해 줄 건데
product라고 하는 url로 시작하는 모든 url은 product.urls.py
라고하는 파이썬 파일이 담당할 거다 라는 의미이다.
path('products/', include('product.urls'))
괄호 앞은 url이름이므로 products라고 적어도 상관없다.
괄호 뒤는 이런 url에 이름 하에 생기는 모든 url들은 product.urls.py
라고 하는 파이썬 파일 안에서 관리 할 거라는 식
* urls.py
from django.contrib import admin
from django.urls import path, include
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.first),
path('second/', views.second),
path('products/', include('product.urls')),
path('boards/', include('board.urls')), ## 추가
]
boards라고 하는 이름으로 생성 된 이 하에 모든 url들은
board라고 하는 폴더 안에 있는 urls.py라고 하는 파이썬 파일이 있다.
# 상품관련 rul
#127.0.0.1:8000/products/1
#127.0.0.1:8000/products/2
#127.0.0.1:8000/products/3
#127.0.0.1:8000/products/abc
# ...
products로 시작하는 url들은
product라고 하는 application 안에 있는 urls.py 안에서 관리, 생성 할 것이다
# 구매 후기 관련 url
#127.0.0.1:8000/boards/1
#127.0.0.1:8000/boards/2
#127.0.0.1:8000/boards/3
# ...
boards 라는 이름하에 생긴 url들은
board라고 하는 application 안에 있는 urls.py에서 생성하고 관리하고 만들어준다.
'Django > 회사 소개 사이트' 카테고리의 다른 글
URL Mapping 3 (내용 추가하기) (0) | 2021.08.03 |
---|---|
URL Mapping ( 결과 값 캡쳐해서 수정 필요) (0) | 2021.07.29 |
웹사이트 만들기 (0) | 2021.07.28 |