#일반적인 웹 요청 처리 프로세스
- 모든 언어는 아래와 같은 처리 구조를 지닌다.
클라이언트요청-> 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 로 활용된다.
[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 |