상세 컨텐츠

본문 제목

[Django] 일반적인 웹 요청 처리 프로세스

Python/Django

by TUZA 2022. 9. 6. 00:18

본문

#일반적인 웹 요청 처리 프로세스

- 모든 언어는 아래와 같은 처리 구조를 지닌다.

 

클라이언트요청-> Load Balancer(Nginx, API gateway)-> URL에 따른 요청 분기

-> 요청 처리 함수 #1 (단순 계산하고 응답)

-> 요청 처리 함수 #2 (데이터베이스 조회내역을 응답)

-> 요청 처리 함수 #3 (네이버 사이트를 크롤링 내역을 응답)

-> 요청 처리 함수 #4 (요청내역을 검사하고, 유효하지 않다면 에러 응답, 유효하다면 파일 스토리지와 DB에 저장하고 OK 응답하고 이메일/ 푸쉬로 보고서 전송)

 

 

#View 함수를 통한 클라이언트 요청 처리

#문자열 응답하기

import json

from django.http import HttpRequest, HttpResponse

def index(request: HttpRequest)-> HttpRequest:
	# 단순 text 문자열
	content = "Hello World!"

	#html 문자열
	#복잡한 문자열 조합은 템플릿 엔진을 활용하면 편리하다.
	content = """<html><body><h1>Hello world!</h1></body></html>"""

	#개체를 json 문자열로 변환(직렬화, Serialize)
	post_list = [{"title": "안녕파이썬", "author": "김아무개"}]
	content = json.dumps(post_list)

	return HttpResponse(content)
    
    
#dumps() : Python 객체를 JSON 문자열로 변환
#loads() : JSON 문자열을 Python 객체로 변환

#템플릿 엔진을 활용한 HTML 문자열 응답

from django.http import HttpRequest, HttpResponse
from django.shortcuts import render

def index(request: HttpRequest)-> HttpRequest:
	# 템플릿 엔진을 통해 문자열로 렌더링할 데이터를 준비한다.
	#ex) 직접 생성, 데이터베이스에 쿼리, 캐시에서 꺼내기, 파일에서 읽기,외부API 호출
	post_list = [{"title": "안녕파이썬"}]

	return render(request, "app/index.html",{
		"post_list" : post_list
	})

#이미지 생성하여 응답하기

from PIL import Image
from django.http import HttpResponse, HttpRequest

def make_image(request: HttpRequest)-> HttpResponse:
	'''지정 width/height 크기로 이미지 응답'''
	width = int(request.GET.get('width', 256))
	height = int(request.GET.get('height', 256))
	width = min(width, 1024)
	height = min(height, 1024)

	image = Image.new("RGB", (width,height), "red")

	response = HttpResponse(content_type = "image/jpg")
	image.save(response, "jpeg")

	return response

 

#urlpatterns 리스트

View 함수에 대한 라우팅(Routing) 테이블

- 일반적으로 웹서버로 유입되는 클라이언트로부터의 요청을 식별하는 1차 기준은 URL

- settings.ROOT_URLCONF에 지정된 urlpatterns으로부터 하위 urlpatterns 을 가질 수 있다.

# settings
ROOT_URLCONF = "myproj.urls"


# myproj/urls.py
# 모든 urls.py 에는 urlpatterns 리스트를 기대한다.

urlpatterns = [
	path("app/", include("app.urls"))
	path("blog/", include("blog.urls"))
    path("catube/", include("catube.urls"))
]

 

 

**Nginx : 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server 로 활용된다.

 

반응형

'Python > Django' 카테고리의 다른 글

[Django] 질문 목록 및 상세 페이지 만들기  (0) 2022.09.16
[Django] 모델(Model)  (15) 2022.09.15
[Django] 장고 관리자 (admin)  (1) 2022.09.15
[Django] 앱(APP) 생성하기 (복습)  (0) 2022.09.10
[Django] 장고 입문  (0) 2022.09.04

관련글 더보기