python - Django - submit by GET, POST

1 분 소요

python - Django - submit by GET, POST

  • 사용자가 html 문서의 form tag로부터 submit한 값을 컨트롤러가 전달받아서 처리해주는 작업을 정리합니다.

template with form submit

  • DjangoProj1 > App1 > templates > App1 > child.html에 다음 내용을 작성해줍니다.
  • 보는 것처럼, GET, POST의 방식으로 submit하는 form을 2개 만들었습니다.
  • 두 form 요소는 모두 /submitResult라는 url로 입력값을 전달해줍니다. 따라서, 값을 입력하는 url과 입력받은 값을 전달해주는 url인 /submitResult를 모두 만들어 줘야 합니다.
<h3> Submit by POST </h3>
<form action="/submitResult" method="post">{% csrf_token %}
    <label>param1</label>
    <input name="param1Name">
    <button type="submit">Submit</button>
</form>

<h3> Submit by GET </h3>
<form action="/submitResult" method="get">{% csrf_token %}
    <label>param2</label>
    <input name="param2Name">
    <button type="submit">Submit</button>
</form>

url matching

  • 사용자가 값을 입력하는 form 부분은 “/” 경로에 만들고, MainController가 담당합니다.
  • 그 값은 “/submitResult”라는 경로로 넘어가도록 해주고, SubmitResultController가 담당합니다.
from django.contrib import admin
from django.urls import path

from App1.views import MainController, SubmitResultController


urlpatterns = [
    path('admin/', admin.site.urls),
    # 얘는 값을 입력받는 form이 포함된 view이고
    path("", MainController.as_view()),
    # 얘는 사용자가 값을 입력하고 submit을 하면 그 값이 넘어가는 url이죠.
    path("submitResult", SubmitResultController.as_view())
]

Controller

  • DjangoProj1 > App1 > views.py에 다음을 정의해줍니다.
  • post메소드는 값을 POST로 전달받았을 때 수행되는 메소드이고
  • get메소든느 값을 GET으로 전달받았을 때 수행되는 메소드입니다.
from django.shortcuts import render, redirect
from django.views import View
from django.http import HttpResponse


class MainController(View):
    def get(self, request, *args, **kwargs):
        return render(
            request,
            'App1/child.html',
            context={}
        )


class SubmitResultController(View):
    def post(self, request, *args, **kwargs):
        print("POST METHOD")
        print(request.POST)
        # <QueryDict: {'csrfmiddlewaretoken': ['wZzZqOAs3DFwZ3c5ftjABzoNOOd9L7kQIyZnFoN0MFp9NaNgpQDyoJK6nhAXJgMi'], 'param1Name': ['afads']}>
        print(request.GET)
        # <QueryDict: {}>
        param1Name = request.POST.get('param1Name')
        return HttpResponse(
            f"POST :: input String :: {param1Name}"
        )

    def get(self, request, *args, **kwargs):
        print("GET METHOD")
        print(request.GET)
        param2Name = request.GET.get('param2Name')
        return HttpResponse(
            f"GET :: input String ::{param2Name}"
        )

Run server

  • 그 다음 서버를 실행한 다음, GET, POST의 각각의 방식을 사용해서 전달해보면 어떻게 다른지 확인할 수 있습니다.
python manage.py runserver

댓글남기기