안녕하세요
이번에는 Django에서 GET, POST 방식에 대해 알아보고 간단한 실습을 진행하겠습니다.
1. Django에서 GET과 POST 메서드란?
웹 서비스 개발에 사용되는 메서드이며, Http 프로토콜에서 데이터 전송을 위해 지원하는 7가지 메서드 중 일부입니다.
1. GET Method
# GET 메서드 예시
http://www.naver.com/index/?parameter=value
GET 방식은 데이터를 URL의 쿼리스트링(query string)에 포함하여 보내며, 브라우저에서 주소창에 입력하는 것과 같은 방식으로 데이터를 전송합니다. 주로 데이터를 요청하는 용도로 사용되며, 요청 URL에 데이터가 노출되므로 보안에 취약할 수 있습니다. 하지만, 캐시를 이용하여 요청을 빠르게 처리할 수 있어서, 빈번하게 요청되는 데이터에 적합합니다.
2. POST Method
# POST 메서드 예시
body {"parameter":"value", ...}
POST 방식은 데이터를 요청 본문(request body)에 담아 보내며, 데이터의 양이 많거나 민감한 정보를 전송할 때 사용됩니다. URL에 데이터가 노출되지 않으므로, 보안성이 높습니다. 하지만, 요청마다 새로운 데이터를 서버로 전송하므로, 요청에 따라 더 많은 자원을 소비합니다.
GET과 POST 방식은 각각의 특성에 따라 적합한 상황이 다르기 때문에, 개발자는 요청 방식을 선택할 때 고려해야 합니다.
또한, Django에서는 GET과 POST 방식을 처리하는 뷰(View) 함수를 제공하며, 뷰 함수 내에서 요청 방식에 따라 다른 로직을 수행할 수 있습니다. 이를 통해 개발자는 요청 데이터를 적절하게 처리하고, 클라이언트에게 적절한 응답을 제공할 수 있습니다.
2. 사전 준비하기 (템플릿 확장, Bootstrap4)
[Django] Django에서 템플릿 확장의 개념과 템플릿 확장 적용하는 방법 실습하기 (tistory.com)
[Django] Bootstrap4에 대해 알아보고 Django에 Bootstrap4 부트스트랩 적용하기 (tistory.com)
실습을 진행하기 앞서 개발 환경을 맞추고자 Django 템플릿 확장과 Bootstrap4를 적용해야 합니다.
3. Django에서 간단한 GET과 POST 메서드 실습하기
1. 템플릿 만들기
<!-- post_list.html -->
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<form method="get">
<button class="btn btn-danger">GET</button>
</form>
<form method="post">
{% csrf_token %}
<button class="btn btn-primary">POST</button>
</form>
<h2>{{GET}}</h2>
<h2>{{POST}}</h2>
{% endblock %}
다음과 같이 템플릿을 만들어 줍니다. 2개의 폼을 만들고 한 개는 GET 한 개는 POST 방식으로 동작하게 끔 method를 설정합니다. 주의할 점은 Django에서 POST 방식을 동작하려면 '{% csrf_token %}'이 필요합니다. csrf 취약점을 이용한 악의적인 공격으로부터 방어해 주는 역할을 합니다.
2. View 만들기
# views.py
from django.shortcuts import render
def post(request):
if request.method == 'POST':
return render(request, 'post_list.html', {'POST':'POST방식입니다!!'})
if request.method == 'GET':
return render(request, 'post_list.html', {'GET':'GET방식입니다!!'})
MTV 패턴에 따라 템플릿에서 method 방식을 지정했기 때문에 저희는 views.py에서 이것에 대한 로직을 처리해주어야 합니다.
이 코드는 POST 방식으로 요청이 왔을 때, request.method 속성이 'POST'로 설정되므로, if 문의 첫 번째 조건식이 참이 되어 POST 방식으로 요청이 왔음을 확인하고, post_list.html 템플릿을 렌더링합니다. 이 때, {'POST':'POST방식입니다!!'}는 템플릿 내에서 사용할 수 있는 변수 POST에 'POST방식입니다!!' 값을 할당하는 코드입니다.
반면 GET 방식으로 요청이 왔을 때, request.method 속성이 'GET'으로 설정되므로, 두 번째 조건식이 참이 되어 GET 방식으로 요청이 왔음을 확인하고, post_list.html 템플릿을 렌더링합니다. 이 때, {'GET':'GET방식입니다!!'}는 템플릿 내에서 사용할 수 있는 변수 GET에 'GET방식입니다!!' 값을 할당하는 코드입니다.
request 객체의 method 속성을 이용하여 요청 방식에 따라 서로 다른 응답을 보내주는 코드입니다. 이를 통해, Django에서 GET과 POST 방식을 구분하여 처리할 수 있습니다.
3. URLconf에 매핑하기
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post, name='index'),
]
다음과 같이 URLconf를 작성하여 Views.py에서 작성한 함수와 매핑해 줍니다.
4. 서버 실행하기
py manage.py runserver
MTV 패턴에 맞춰 템플릿, Views, Urls를 다 구성해주셨다면 서버를 실행하여 확인합니다.
1. GET Method 확인하기
127.0.0.1:8000
서버가 실행되었다면 브라우저를 열고 url을 입력하는 곳에 다음과 같이 GET이 발생합니다. 그냥 브라우저에 주소만 입력하고 들어가도 GET 메서드가 발생하는 것입니다. GET 버튼을 눌러도 form에서 GET 메서드를 설정하여 똑같이 동작합니다.
2. POST Method 확인하기
앞선 GET 메서드와 조금 다르게 POST는 버튼에 의해서 동작합니다. POST 버튼을 눌러 form에서 POST 메서드를 설정했기 때문입니다.
이번 시간에는 GET과 POST에 대해 알아보고 Django에서 GET과 POST 방식에 대해서 실습을 진행했습니다.
감사합니다.
'Framework > Django' 카테고리의 다른 글
[Django] Django-MySQL 연동하는 방법과 MySQL Workbench 사용 실습하기 (0) | 2021.02.08 |
---|---|
[Django] Django ORM에 대해 알아보고 POST를 이용한 데이터베이스 저장하기 (0) | 2021.01.30 |
[Django] Bootstrap4에 대해 알아보고 Django에 Bootstrap4 부트스트랩 적용하기 (0) | 2021.01.30 |
[Django] Django MTV(Model-View-Controller) 디자인 패턴 알아보기 (0) | 2021.01.30 |
[Django] 웹 프레임워크 Django의 동작원리와 라우팅에 대해 알아보기 (0) | 2021.01.30 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!