Django 기초 - URL 관리

ID짱재·2021년 7월 15일
0

Django

목록 보기
3/43
post-thumbnail

🌈 URL 관리

🔥 URL 이란?

🔥 urls.py 이해

🔥 name 속성

🔥 HttpRespons()


1. URL 이란?

  • 사용자가 어떤 url 경로를 서버에 요청하느냐에 따라 서버의 응답이 달라지는데, 요청된 request에 따라 작동시킬 로직을 매핑하는 곳이 urls.py임
  • 즉, App의 기능에 따라 고유한 접근 경로를 가질 수 있도록 urls.py에서 경로와 로직 간의 관계를 처리
  • 프로젝트를 생성하면 urls.py가 자동으로 생성되는데, 이 곳에서는 index페이지 및 admin과 관련한 url 경로를 지정할 때 사용하고, 각 App별로 urls.py를 별도로 생성하여 연동시킴
  • 이러한 패턴을 통해 url을 분산시켜 관리함으로써 코드 복잡성을 줄임

2. urls.py 이해

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

3. name 속성

  • 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 지정
]

4. HttpRespons()

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가 잘 매핑되었는지 확인할 수 있음
profile
Keep Going, Keep Coding!

0개의 댓글