장고에서 HTTP GET, POST 요청 처리하는 방법

2022. 2. 20. 22:42·Django
목차
  1. HTTP GET 요청 처리
  2. HTTP POST 요청 처리

장고에서는 뷰 파일과 url을 설정하여 클라이언트로부터 들어오는 HTTP GET 및 POST 요청을 처리할 수 있습니다.

 

HTTP 요청에는 크게 GET과 POST가 존재하며, 둘의 가장 큰 차이점은 바디(body)의 존재 유무입니다. GET 요청에는 헤더만 있고 바디가 없으며, POST 요청에는 헤더와 바디가 모두 존재합니다.

HTTP GET 요청 처리

HTTP GET 요청은 URL에 쿼리 파라미터를 추가하여 전송합니다. 즉, 다음과 같이 URL의 마지막에 ?를 붙인 다음 파라미터와 값을 넣어 요청을 전송합니다.

http://127.0.0.1:8000/skin/products?id=1

만약, 두 개 이상의 파라미터를 전송하려고 한다면 다음과 같이 &을 사용합니다.

http://127.0.0.1:8000/skin/products?id=1&skinType=dry

이제 해당 URL로 들어오는 GET 요청을 처리하기 위해 뷰 파일 작업이 필요하겠죠. 제품 정보를 출력하는 SkinProductView가 있다고 해보겠습니다. 해당 클래스 안에 get 요청을 처리하는 함수를 다음과 같이 선언할 수 있습니다.

1 from django.views import View
2 from django.http import JsonResponse
3
4 from .models import Product
5
6 class SkinProductView(View):
7    def get(self, request, *args, **kwargs):
8      product_id = request.GET.get('id', None)
9      skintype = request.GET.get('skinType', None)
10    
11     product = Product.objects.get(id=product_id)
12    
13     product_information = {
14        "product_id": product.id,
15        "skin_type": product.skintype
16     }
17    
18    return JsonResponse({"message": product_information}, status=200)

하나씩 코드를 살펴보도록 하겠습니다. 6번째 줄은 View 클래스를 상속받아 SkinProductView를 선언하는 것입니다. 여기서 View는 장고에서 제공하는 모듈입니다.

 

7번째 줄은 get 요청을 처리할 함수로 request는 HTTP 요청을 의미하며 *args는 가변인자 처리, **kwargs는 키워드인자 처리입니다. 만약, 이 부분이 잘 이해가 되지 않는다면 아래 포스팅 링크를 참조해보셔도 좋을 거 같습니다.

  • 파이썬 클래스와 self
  • 가변인자와 키워드인자 처리

8번째 줄의 request.GET.get('id', None)은 GET 요청을 통해 들어온 HTTP request를 받겠다는 것이며, 쿼리 파라미터 id 키에 해당하는 값을 파이썬의 메소드(get) 를 통해 얻겠다는 것입니다. 쿼리 파라미터 옆의 None 은 요청이 들어오지 않으면 기본값으로 None 을 지정하겠다는 것을 의미합니다.

 

11번째 줄은 product_id 변수로 받은 id를 통해 Product에 접근하여 일치하는 제품 번호를 갖는 객체를 호출하는 것입니다. 13~16번 줄은 이를 product_information에 객체의 형태로 담아 전송하기 위한 과정입니다.

 

마지막으로 18번째 줄은 JsonResponse를 통해 HTTP GET 요청에 대한 응답으로 JSON 형식의 데이터를 제공하고, 상태 코드 200을 반환하겠다는 것입니다.

 

이제 장고의 URL 부분도 처리를 해줘야겠죠. 다음과 같이 URL에서도 쿼리 파라미터를 처리할 수 있게 설정해주면, 의도했던 대로 GET 요청을 처리할 수 있습니다.

from django.urls import URLPattern, path

urlpatterns = [
    path('skin/products/<int:product_id>', ProductView.as_view()),
]

HTTP POST 요청 처리

POST 요청은 다음과 같이 바디에 키와 값을 담아 진행합니다. 예를 들어, POST 요청으로 새로운 상품을 데이터베이스에 등록하고자 한다고 해보겠습니다. 다음과 같이 뷰 파일과 URL을 작업할 수 있습니다.

1 import json
2 
3 from django.views import View
4 from django.http import JsonResponse
5
6 class SkinProductView(View):
7   def post(self, request, *args, **kwargs):
8     try:
9       data = json.loads(request.body)
10              
11      product_id = data["id"]
12      skintype = data["skintype"]
13
14      Product.objects.create(id=product_id, skintype=skintype)
15
16      return JsonResponse({"message": f"PRODUCT_{product_id}_REGISTRED"}, status=200)    
17    except KeyError:
18      return JsonResponse({"message": KEY_ERROR}, status=400)

POST 요청은 JSON 형태로 바디에 담겨 들어오기 때문에 GET 요청을 처리하는 것과는 조금 다릅니다. 9번째 줄의 data = json.loads(request.body)는 JSON 형태로 들어오는 request의 body를 파이썬에서 읽어올 수 있도록 data에 담는 과정입니다. 이후에는 해당 객체를 파이썬의 객체처럼 활용하여 키와 값에 접근할 수 있습니다.

 

14번째 줄은 쿼리셋 메소드를 사용하여 데이터베이스에 새로운 제품을 생성(create)하는 코드입니다. 이후, 데이터베이스 등록이 잘 됐다면 16번째 줄에서처럼 200 상태 코드와 함께 성공 메시지를 반환해 줄 수 있습니다.

 

18번째 줄은 KeyError 가 발생하는 경우를 처리해주는 것인데요. POST 요청의 경우에는 바디에서 받기로 설정해둔 키를 사전에 설정해두기 때문에, 이를 전달해주지 않을 경우 파이썬에서 해당 에러 메시지를 띄우게 됩니다.

 

마지막으로, POST 요청은 바디에 정보를 담아 요청하기 때문에 URL에서는 별도의 작업이 필요하지 않으며, 해당 뷰 클래스가 호출될 수 있도록만 설정되어 있으면 요청을 처리할 수 있습니다.

반응형

'Django' 카테고리의 다른 글

장고 get_or_create()와 race condition 문제  (0) 2022.03.05
장고 Q를 활용한 필터링, 정렬, 검색 방법  (0) 2022.02.20
장고 ORM과 쿼리셋의 개념  (0) 2022.02.07
장고, 파이썬 csv 파일 처리 방법  (0) 2022.02.01
장고 프론트엔드와 통신 방법: HTTP POST, GET request 처리하기  (0) 2022.01.28
  1. HTTP GET 요청 처리
  2. HTTP POST 요청 처리
'Django' 카테고리의 다른 글
  • 장고 get_or_create()와 race condition 문제
  • 장고 Q를 활용한 필터링, 정렬, 검색 방법
  • 장고 ORM과 쿼리셋의 개념
  • 장고, 파이썬 csv 파일 처리 방법
휘 Hwi
휘 Hwi
개발자 성장 로그
  • 휘 Hwi
    개발자 로그: 변화를 위한 공간
    휘 Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 101 (1)
      • Web | Internet (4)
      • HTML | CSS (4)
      • Python (9)
      • Django (20)
      • Javascript (0)
      • Node.js (0)
      • React (0)
      • React Native (0)
      • Database (1)
      • Git (1)
      • Terminal | Vim (1)
      • Auth | Security (4)
      • AWS (0)
      • Docker (0)
      • Kubernetest (1)
      • Deployment (1)
      • Project (2)
      • TIL (12)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JWT
    HTTP POST 요청
    프로젝트 회고
    함수
    장고 URL
    HTTP GET 요청
    파라미터
    target="_blank"
    html
    JWT 인코딩
    깃
    HTTP
    파이썬
    깃 퍼블릭 키 등록
    요소 크기 설정
    탭내빙
    장고 Views
    장고 프로젝트
    새 탭에서 열기
    css
    요소 상대 크기
    배포
    JWT 디코딩
    정규 표현식
    TIL
    깃 오류
    요소 절대 크기
    깃 ssh
    장고
    깃 에러 해결
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
휘 Hwi
장고에서 HTTP GET, POST 요청 처리하는 방법
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.