1. GET 전송

[main/urls.py]

path('parameter/', views.get_post),

위와 같이 urls.py를 수정해줍니다.

"http://DOMAIN/main/parameter/?id=1234"와 같은 요청이 들어올 경우 "get_post" 함수로 파라미터를 전달하게 됩니다.

 

[main/views.py]

def get_post(request):
    if request.method == 'GET':
        id = request.GET['id']
        data = {
            'data': id,
        }
        return render(request, 'main/parameter.html', data)

"views.py"를 위와 같이 수정하면 if 문을 통해 GET요청인지 POST요청인지 확인을 하여 이후의 작업들을 진행하게 하도록 소스를 구성하였습니다.

여기서 request.GET['id']는 "GET"요청으로 들어온 id라는 파라미터를 받는 구문입니다.

이후 data딕셔너리에 파라미터를 담아 "parameter.html"로 전송하게끔 구현되어 있습니다.

 

[template/main/parameter.html]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ data }}
</body>
</html>

위처럼 "parameter.html" 파일을 만들고 "{{ data }}" 템플릿 코드를 사용하여 "views.py"에서 전송한 데이터를 출력합니다.

 

[결과]

지금까지 "GET_Method_TEST"라는 문자열이 urls.py -> views.py -> parameter.html을 거쳐 정상적으로 출력되는 것을 확인 할 수 있습니다.

 

 

2. POST 전송

[post.html]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>

    function send() {
        alert("send");
        document.getElementById("contents").submit();
    }
    </script>
</head>
<body>
    <form id="contents" name="contents" method="post" action="{% url 'main:parameter' %}">
        {% csrf_token %}
        id : <input name="id" type="text">
        pw: <input name="name" type="text">
        <button type="button" onclick="send();">전송</button>
    </form>
</body>
</html>

"templates/main/post.html" 파일을 생성하여 위처럼 소스코드를 만들어 줍니다.

form 태그의 action 부분을 설명드리자면 "main앱의 path이름이 parameter인 것을 찾아가라는 의미입니다."

이 소스는 "id"와 "name"을 파라미터로 받아 javascript를 이용하여 "send" alert창을 띄우고 POST로 전송됩니다.

 

[main/urls.py]

path('parameter/', views.get_post, name='parameter'),
path('post/', views.post_view),

위처럼 "path('parameter/', views.get_post, name='parameter')," 이 부분에 "parameter"라는 path의 이름을 지어줍니다.

"path('post/', views.post_view)," 이 부분은 입력 페이지를 호출하기 위한 path 입니다.

 

[main/views.py]

def post_view(request):
    return render(request, 'main/post.html')

def get_post(request):
    if request.method == 'GET':
        id = request.GET['id']
        data = {
            'data': id,
        }
        return render(request, 'main/parameter.html', data)

    elif request.method == 'POST':
        id = request.POST['id']
        name = request.POST['name']
        data = {
            'id': id,
            'name': name
        }
        return render(request, 'main/parameter.html', data)

"post_view"라는 함수는 사용자 입력 페이지를 호출하기위한 함수입니다.

"get_post"함수의 "else if request.method == 'POST'" 이하 구문은 POST요청이 들어왔을 시 동작할 코드들이 존재하면 
"request.POST['id'], request.POST['name']"을 통하여 사용자가 입력한 "id"와 "name"을 전송받습니다.

이후 진행상황은 GET요청과 동일하게 data 딕셔너리에 "id", "name" 이라는 이름으로 "parameter.html"로 데이터를 전송합니다.

 

[templates/main/parameter.html]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ data }}<br />
    post_id = {{ id }}<br />
    post_name = {{ name }}<br />
</body>
</html>

기존 "GET요청"으로 받은 데이터는 출력이 되지 않을 것이며 "POST 요청"으로 넘어온 데이터들은 한줄씩 출력될 것입니다.

 

[사용자 입력]

"main/post/"로 요청을 하여 사용자 입력페이지에 접속하여 위와 같이 폼을 입력하고 전송을 누릅니다.

 

[결과]

이처럼 POST 데이터를 송수신 할 수 있습니다.

+ Recent posts