urls.py 연결 방식

Ethan·2023년 12월 26일
0

django

목록 보기
8/28

웹으로부터 요청이 들어오면 장고가 가장 먼저 확인하는 파일은 프로젝트 구성 디렉토리urls.py 파일이다.


왜 프로젝트 구성 디렉토리의 urls.py를 먼저 확인할까?

그 이유를 알아보기 위해 settings.py 파일을 확인해보자.

settings.py 파일을 확인하면 ROOT_URLCONF 가 있다. 이는 장고가 URL을 보고 가장 먼저 확인해야할 파일을 설정하는 내용이다. 장고 프로젝트를 생성하면 기본적으로 해당 부분은 프로젝트 구성 디렉토리의 urls로 입력된다.

ROOT_URLCONF = '{프로젝트 구성 디렉토리 이름}.urls'

프로젝트 구성 디렉토리 urls.py 파일

프로젝트 구성 디렉토의 urls.py 파일의 urlpatters를 살펴보면 자동으로 생성된 하나의 로직을 확인할 수 있다. 이는 장고가 생성한 관리자 페이지 url 패턴이다.

from django.contrip import admin
from django.urls import path

urlpatterns = [
	path('admin/', admin.site.urls),  📌장고가 생성한 관리자 페이지 url 패턴
]

'admin/'의 의미는 '사이트 주소 뒤에 admin/이 있으면' 라는 뜻이다. 우리는 개발 서버를 실행하기 때문에 유저가 127.0.0.1:8000/admin을 입력하는 경우를 말한다.

admin.site.urls의 의미는 admin.site.urls를 확인하라는 뜻이다.

즉, path('admin/', admin.site.urls)사이트주소/admin으로 접속하면 admin.site.urls를 확인하고 처리하라는 뜻이다.


새로운 경로 추가하기

지난 포스팅에서 APP1 이름의 앱 디렉토리를 생성했다. 직접 url 패턴을 작성해보자.

from django.contrip import admin
from django.urls import path, include  📌include 함수를 불러오는 코드
    
urlpatterns = [
	path('admin/', admin.site.urls),
	path('APP1/', include('APP1.urls'))  📌새로 추가한 url 패턴
]

작성된 url 패턴을 살펴보면 127.0.0.1:8000/APP1 로 접속하면 APP1.urls를 확인하라는 것이다.

여기서 include 함수는 프로젝트 구성 디렉토리의 urls 파일이 아닌, 별도의 앱 디렉토리의 urls 파일을 통해 처리하기 위해서 사용된다. 즉, '여기서 처리하지 말고, APP1urls 파일을 확인하고 처리해라' 라는 뜻이 된다. include 함수를 사용하기 위해서는 django.urls 모듈의 include 함수를 불러오는 코드를 입력해야 한다.


APP1.urls.py 만들기

현재 APP1 앱 디렉토리를 확인해보면 urls.py 파일이 없다. 따라서 127.0.0.1:8000/APP1 로 접속했지만 APP1.urls를 확인할 수가 없다.

📂ABC
    📄manage.py
    📄db.sqlite3
    📂ABC
        📄__init__.py
        📄settings.py
        📄urls.py
        📄wsgi.py
    📂APP1  📌디렉토리 내부에 urls.py 파일 없음
        📂migrations
        📄__init__.py
        📄admin.py
        📄apps.py
        📄models.py
        📄tests.py
        📄views.py
        

VScode로 APP1 앱 디렉토리 내부에 urls.py 파일을 생성한다. 생성 후 디렉토리 구조는 다음과 같다.

📂ABC
    📄manage.py
    📄db.sqlite3
    📂ABC
        📄__init__.py
        📄settings.py
        📄urls.py
        📄wsgi.py
    📂APP1  
        📂migrations
        📄__init__.py
        📄admin.py
        📄apps.py
        📄models.py
        📄tests.py
        📄views.py
        📄urls.py 📌새로 생성한 urls 파일

urls.py 파일 내용 입력하기

include 함수는 앱 디렉토리 내에서 사용하지 않기 때문에 삭제하고, 새로운 url 패턴을 정의했다. '127.0.0.1:8000/APP1/index로 접속하면, views 파일의 index 함수를 확인하고 처리해라' 라는 뜻이다.

views 파일을 모듈로 불러오기 위해 상단에 from . import views 코드를 작성했다. from . 은 현재 디렉토리를 말한다. 현재 디렉토리는 'ABC/APP1' 이기 때문에 APP1 내부에 있는 urls.py을 불러오게 된다.

from django.contrip import admin
from django.urls import path
from . import views  📌현재 디렉토리에 있는 views.py 파일을 불러오는 코드
    
urlpatterns = [
	path('index/', views.index)  📌추가한 url 패턴
]

views 모듈의 index 함수 정의하기

views 모듈의 index 함수를 불러오는 것 까지는 가능하지만 현재 views 모듈에 index 함수가 정의되지 않았다. views 모듈의 index 함수를 정의해보자.

from django.shortcuts import render
from django.http import HttpResponse  📌HttpResponse 함수를 불러오는 코드
    
def index(request):  📌추가된 index 함수
	return HttpResponse("<h2>안녕</h2>")

작성된 코드를 해석하면 다음과 같다. index 함수를 실행하면 유저로부터 http 요청을 받고 http 응답으로 '안녕' 이라는 html 요소를 전달한다.


정리하기

위 모든 과정을 정리하자면 다음과 같다.

  1. 유저가 127.0.0.1:8000/APP1/index를 입력한다.
  1. 가장 먼저 프로젝트 구성 디렉토리의 urls 파일을 확인한다.
path('APP1/', iclude('APP1.urls'))  📌/APP1로 접속하면 APP1.urls를 확인해라
  1. APP1.urls를 참고한다.
path('index/', views.index)  📌/index로 접속하면 views 모듈의 index를 확인해라
  1. views.index를 참고한다.
def index(request): 
	return HttpResponse("<h2>안녕</h2>")  📌http 객체를 생성하고 <h2>안녕</h2>을 문자열을 넣어 반환해라
  1. 다음과 같은 내용이 출력된 페이지로 이동한다. <h2>안녕</h2>
profile
글로 쓰면 머리 속에 정리가 되...나?

0개의 댓글

관련 채용 정보