GET과 POST는 서버와 통신하는 가장 기본방식이다.
GET은 서버에 단순한 정보를 요청하고 데이터를 내줄 때 쓴다.
POST는 서버에 어떠한 데이터를 저장, 수정, 삭제, 연산작용 등을 위해 쓴다.
우리가 그동안 사용한 뷰에서도 GET과 POST 사용에 대해 구분을 해줘야한다.
| 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으로 구분해주었다.
| 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 |
어디서 많이 본 형태이다.
| def index(request): category = request.GET.get("category") hashtag = request.GET.get("hashtag") | cs |
index뷰에서 category와 hashtag를 가져올 때 사용했던 GET방식이다.
이를 참고하여 POST방식을 만든 것이다.
그리고 GET방식과 POST방식의 차이점은 GET에서는 데이터를 전부 가져오거나 필터처리했는데,
POST에서는 데이터를 저장하므로 인스턴스를 불러오는 게 아니라 인스턴스를 새로 만든다.
| 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를 입력하여 우리가 입력한 데이터를 저장시킨다.
우리가 흔히 쓰는 댓글창은 내용 입력 후 자동으로 댓글이 등록된 화면이 나타나는데,
이 기능을 적용하기 위해서는 작업이 필요하다.
| from django.http import HttpResponseRedirect | cs |
| 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한다. 이 메소드가 자동리프레시를 시켜준다.
| return HttpResponseRedirect("/{}/".format(article_id)) | cs |
페이지 주소는 현재페이지를 사용해야하므로 format 함수를 이용해 article_id를 넘겨주어 페이지를 설정한다.