Python/Django
HTTP method == 'GET' , 'POST'
by K-밍키
2022. 5. 31.
1. GET : 데이터를 읽거나 검색할 때 사용
- URL에 변수(데이터)를 포함시켜 요청한다.
- 데이터를 Header(헤더)에 포함하여 전송한다.
- URL에 데이터가 노출되어 보안에 취약하다.
- 전송하는 길이에 제한이 있다.
- 캐싱(Caching, 한번 접근 후 또 요청할 시에 빠르게 접근하기위해 레지스터에 데이터를 저장시켜 놓는 것)할 수 있다.
2. POST : 새로운 데이터를 생성하거나 수정, 삭제를 요청할 때 사용
- URL에 변수(데이터)를 노출하지않고 요청한다.
- 데이터를 Body에 포함시킨다.
- URL에 데이터가 노출되지 않아서 기본 보안이 되어있다.
- 전송하는 길이에 제한이 없다.
- 캐싱할 수 없다.
3. 예시
from django.shortcuts import render, redirect
from .models import UserModel
def sign_up_view(request):
# 메소드가 GET인 경우 html을 랜더링해서 보여준다.
if request.method == 'GET':
return render(request, 'user/signup.html')
# 메소드가 POST인 경우 html에서 보내준 값을 받아와 UserModel에 오브젝트를 생성한다.
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
UserModel.objects.create_user(username=username, password=password, bio=bio)
return redirect('/sign-in')
4. HTMl form 태그 : form태그를 사용하여 POST 데이터를 한번에 넘겨주자
# 메소드 POST로 action에 form 안의 데이터를 보내준다.
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %} # form태그를 사용하기 위해 필수토큰(csrf공격방지)
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
# name의 username으로 데이터를 보냄
</div>
</form>