GET과 POST는 서버와 통신하는 가장 기본방식이다.


GET은 서버에 단순한 정보를 요청하고 데이터를 내줄 때 쓴다.


POST는 서버에 어떠한 데이터를 저장, 수정, 삭제, 연산작용 등을 위해 쓴다.



우리가 그동안 사용한 뷰에서도 GET과 POST 사용에 대해 구분을 해줘야한다.


1
2
3
4
5
6
7
8
9
10
def detail(request, article_id):
    if request.method == "GET":
        article = Article.objects.get(id=article_id)
        hashtag_list = HashTag.objects.all()
        ctx = {
            "article" : article,
            "hashtag_list" : hashtag_list,
            }
    return render(request, "detail.html", ctx)
 
cs

 

모델에서 데이터를 불러오는 코드는 GET으로 구분해주었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
def detail(request, article_id):
    if request.method == "GET":
        article = Article.objects.get(id=article_id)
        hashtag_list = HashTag.objects.all()
        ctx = {
            "article" : article,
            "hashtag_list" : hashtag_list,
            }
    elif request.method == "POST":
        username = request.POST.get("username")
        content = request.POST.get("content")
 
    return render(request, "detail.html", ctx)
 
cs


어디서 많이 본 형태이다.


1
2
3
def index(request):
    category = request.GET.get("category")
    hashtag = request.GET.get("hashtag")
cs


index뷰에서 category와 hashtag를 가져올 때 사용했던 GET방식이다.

이를 참고하여 POST방식을 만든 것이다.


그리고 GET방식과 POST방식의 차이점은 GET에서는 데이터를 전부 가져오거나 필터처리했는데,

POST에서는 데이터를 저장하므로 인스턴스를 불러오는 게 아니라 인스턴스를 새로 만든다.


1
2
3
4
5
6
7
8
    elif request.method == "POST":
        username = request.POST.get("username")
        content = request.POST.get("content")
        Comment.objects.create(
            article=article,
            username=username,
            content=content,
        )
cs


Comment 클래스에 인스턴스를 만드는 코드이다. create를 입력하여 우리가 입력한 데이터를 저장시킨다.



우리가 흔히 쓰는 댓글창은 내용 입력 후 자동으로 댓글이 등록된 화면이 나타나는데,

이 기능을 적용하기 위해서는 작업이 필요하다.


1
from django.http import HttpResponseRedirect
cs


1
2
3
4
5
6
7
8
9
10
    elif request.method == "POST":
        username = request.POST.get("username")
        content = request.POST.get("content")
        Comment.objects.create(
            article=article,
            username=username,
            content=content,
        )
 
        return HttpResponseRedirect("/{}/".format(article_id))
cs


HttpResponseRedirect 메소드를 import한다. 이 메소드가 자동리프레시를 시켜준다.


1
return HttpResponseRedirect("/{}/".format(article_id))
cs


페이지 주소는 현재페이지를 사용해야하므로 format 함수를 이용해 article_id를 넘겨주어 페이지를 설정한다.

블로그 이미지

쵸잇

,