🔥 URL 이란?
🔥 urls.py 이해
🔥 name 속성
🔥 HttpRespons()
- 사용자가 어떤 url 경로를 서버에 요청하느냐에 따라 서버의 응답이 달라지는데, 요청된 request에 따라 작동시킬 로직을 매핑하는 곳이 urls.py임
- 즉, App의 기능에 따라 고유한 접근 경로를 가질 수 있도록 urls.py에서 경로와 로직 간의 관계를 처리
- 프로젝트를 생성하면 urls.py가 자동으로 생성되는데, 이 곳에서는 index페이지 및 admin과 관련한 url 경로를 지정할 때 사용하고, 각 App별로 urls.py를 별도로 생성하여 연동시킴
- 이러한 패턴을 통해 url을 분산시켜 관리함으로써 코드 복잡성을 줄임
1) urlpatterns 기본 형태
urlpatterns = [ path('경로', '로직'), path('경로', '로직'), path('경로', '로직') ... ]
2) urls.py 연동 방법
- urls.py와 각 App별로 분리해둔 urls.py를 연결하기 위해서는 include 사용
- 🔍 from django.urls import include
- 🔍 path('경로/', include('[App이름].urls')) : [App이름]의 urls.py를 참조
# urls.py from django.contrib import admin from django.urls import path, include # 👈 include 가져오기 from blog.views import index urlpatterns = [ path('admin/', admin.site.urls), # 👈 admin 페이지 메인 사이트 path('', index), # 👈 index 페이지 경로 path('myuser/', include('myuser.urls')), # 👈 도메인/myuser/로 진입햇을 때 path('board/', include('board.urls')), # 👈 도메인/board/로 진입햇을 때 ]
2) urls.py와 view.py 매핑 방법
- 각 App 디렉토리 안에 urls.py를 생성하여 관리하며, View의 함수가 실행될 수 있도록 연결
- 🔍 path('list/', views.board_list) : "/앱/list/"로 요청오면, views.py의 board_list 함수 실행
- 🔍 path('detail/<int:pk>', views.board_detail) : /앱/detail/숫자/로 요청오면, views.py의 board_detail 함수가 실행되고, 함수에 pk값을 함께 전달
# board.urls.py from django.urls import path from . import views urlpatterns = [ path('list/', views.board_list), # 👈 도메인/board/list/ 로 진입 path('write/', views.board_write), # 👈 도메인/board/write/로 진입 path('detail/<int:pk>', views.board_detail), # 👈 도메인/board/detail/정수/ 로 진입 ]
- urls.py에서 전달한 pk를 해당 함수에 파라미터로 입력 받아야함
# board.views.py from django.shortcuts import render # Create your views here. def board_detail(request, pk): pass
- name 속성을 사용하면, html에서 a태그를 사용할 때 name값으로 링크를 연결시킬 수 있음
- name값으로 링크를 걸었을 때의 장점은 url 경로가 변경되더라도, html파일을 수정할 필요없음
# board.urls.py from django.urls import path from . import views urlpatterns = [ path('list/', views.board_list, name='board_list'), # 👈 name 지정 path('write/', views.board_write, name='board_write'), # 👈 name 지정 ]
- html 파일에서 a태그로 링크 연결 방법
- 🔍
<a href="{% url 'borad_list' %}">목록으로 이동</a>
⇢ http://127.0.0.1:8000/board/list- 🔍
<a href="{% url 'borad_write' %}">글쓰기</a>
⇢ http://127.0.0.1:8000/board/wirte
1) 사용자가 http://127.0.0.1:8000/.../의 경로로 웹브라우저를 통해 서버에 요청
2) Django 서버가 URL을 분석한 뒤, urls.py에 매핑된 함수 찾아 호출
3) view.py에서 해당 함수의 최종적인 실행의 결과가 사용자에게 전달#views.py from django.shortcuts import render from django.http import HttpResponse # HttpResponse : 페이지의 응답을 전달하는 Class # Create your views here. def index(request): return HttpResponse('안녕하세요!')
- HttpRespons는 페이지의 응답을 전달하는 class로 HttpResponse() 내의 값을 화면에 출력
- 이를 통해 간단히 url.py와 views.py가 잘 매핑되었는지 확인할 수 있음