본문 바로가기
Python/Django

Django에서 Request 처리 실행 단계 정리

by Lee David 2022. 8. 7.
반응형

Django에서 요청이 들어왔을때 처리하는 방식에 대해서 정리하고자 합니다.

Django Life Cycle

1. 요청 확인

url을 통해 요청이 들어오는 경우가 대부분으로 유효한 요청이 들어온건지 urlPatterns에 등록된 url에 등록된 메서드를 실행합니다. 파이썬 파일 구조에서는 View에 등록된 함수들을 보통 사용합니다.

  • urlPatterns에 메서드를 추가하려면 먼저 프로젝트의 settings.py에 ROOT_URLCONF 설정 값을 확인 합니다.
ROOT_URLCONF = "project.urls"
  • project/urls.py 에 urlpatterns 에 내용을 추가 합니다.
urlpatterns = [
    path("app/", include("app.urls")), # app 디렉토리 하위에 정리하고자 하는 url 들의 위치 등록
    path("page/", views.page), # page로 들어온 요청들을 실행할 메서드 정보 등록
]
2. View에서 데이터 가공

요청된 request 객체의 요청 방식(GET, POST,FILES 메서드들을 비교연산시에는 대문자 String으로 비교연산을 해주어야 합니다.)을 확인하고 메서드에서 분기시켜 요청을 처리하고 화면에 대한 템플릿을 지정하고 화면에 데이터를 주입할 때에는 render 함수를 통해 html을 반환 하는 것을 권장 합니다.

Http 요청 방식 확인 예제

def checkRequest(request) :
    if request.method == "GET":
        return render(request, "app/get.html")
    elif request.method == "POST":
        return redirect("app/post.html")
    else:
        return render(request, "app/other.html")

Render 함수 사용 예제

def index(request: HttpRequest) -> HttpResponse:
    data = [
        {"name":"David", "age":13}, 
        {"name":"Roan", "age":17},
    ]
    
    return render(request, "app/index.html", {
        "data": data
    })
3. url과 view의 결합도

스프링과는 다르게 view 메서드 마다 url을 강제적으로 지정해주지 않고 url과 함수의 느슨한 결합으로 다른 url에 동일한 view 메서드를 적용하기 쉽습니다. 또한 정규식등을 적용할 수 있기 때문에 pattern에 따른 비슷한 url도 유연하게 관리도 가능합니다.

정규식이 포함된 url을 사용할 경우 re_path 함수를 사용하는 것을 권장하고 있습니다.

urlpatterns = [
    path('articles/2003/', views.special_case_2003), # 기본 스트링 값 정의된 url
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), # 정규 식을 포함한 url
]
반응형