[pinterest clone (10)] HTTP 프로토콜 GET, POST
웹 프로그래밍

[pinterest clone (10)] HTTP 프로토콜 GET, POST

728x90
반응형

protocol: 일종의 통신규약이다.

우선 알아둘 메서드: GET, POST

 

User와 Server가 request하고 response 할텐데 서버가 뭘 원하는지 그런 추가적인 정보가 필요하다.

그런걸 넣어주는 방식이 GET, POST이다. (대충 이런 느낌)

 

GET Inquiry:

보통 조회를 하기 위해서 요청을 많이 보냄. 

 

POST:

뭐 새로 만들때, 수정할때 많이 사용. 

 

잘 모르겠다. 우선 써보고 뭔지는 나중에 더 공부해서 업뎃하겠다. 


GET, POST 실습

 

브라우저에서 주소창에 넣으면 자동으로 알아서 보내지게 되는게 GET이고 POST는 따로 설정을 해야한다.

POST 쓸려면 HTML안에다 form을 만들어주어야한다.

 

{% extends 'base.html' %}

{% block content %}

    <div style="height: 20rem; background-color: #38df81; border-radius: 1rem; margin: 2rem; ">
        <h1>
            testing
        </h1>
        <form action="/account/hello_world/" method="post">
            <input type="submit" class="btn btn-primary" value="POST">

        </form>
    </div>

{% endblock %}

action에는 요청을 하려는 URL을 넣어준다.

 

runserver

이대로 런서버 돌려주면 forbidden (403) error가 발생한다. 

POST method를 사용해서 서버에 요청을 보낼때는 항상 CSRF 토큰을 form안에 명시해주어야한다.

{% extends 'base.html' %}

{% block content %}

    <div style="height: 20rem; background-color: #38df81; border-radius: 1rem; margin: 2rem; ">
        <h1>
            testing
        </h1>
        <form action="/account/hello_world/" method="post">
            <input type="submit" class="btn btn-primary" value="POST">
            {% csrf_token %}

        </form>
    </div>

{% endblock %}

csrf 토큰은 저렇게해주면 자동생성되며 보안기능?중 하나라고 보면된다.

 

runserver
정상작동은 하는데 변하는게 없다. views.py에서 post고 get이고 따로 나누는 알고리즘이 없으니까 당연.

 

그거 만들자.

from django.http import HttpResponse
from django.shortcuts import render


def hello_world(request):

    if request.method == "POST":
        return render(request, 'accountapp/hello_world.html', context={'text': 'POST METHOD!!!'})

    else:
        return render(request, 'accountapp/hello_world.html', context={'text': 'GET METHOD!!!'})

context는 데이터꾸러미라고 보면 된다. text라는 이름을 가지고 내용물은 POST METHOD!!!

이걸 이제 html에 뿌려서 보내줘야한다.

 

{% extends 'base.html' %}

{% block content %}

    <div style="height: 20rem; background-color: #38df81; border-radius: 1rem; margin: 2rem; ">
        <h1>
            testing
        </h1>
        <form action="/account/hello_world/" method="post">
            <input type="submit" class="btn btn-primary" value="POST">
            {% csrf_token %}

        </form>
        <h1>
            {{ text }}
        </h1>
    </div>

{% endblock %}

이중괄호로 text 전달. 

 

 

 

 

 

728x90
반응형