GET 방식을 사용하기 위해 url 에 parameter 를 추가해주면 되고, POST 방식을 사용하기 위해서는 html 안에 form 을 만들어 주어야 한다.
<!--hello_world.html-->
form 이라는 것은 쉽게 말해서 서버에게 보내는 명세서 같은 개념이라고 할 수 있다. 어떤 글을 작성한다거나, 파일을 첨부한다거나의 그 데이터들이 POST body 안에 들어가는데, 그 데이터들이 이 form 안에 다 들어가게 될것이다.
action 의 value 에는 우리가 요청하려는 url 을 넣어주어야 한다 -> 우리가 지금까찌 만든 url 주소를 <form action="/account/hello_world/"> 이렇게 넣어주면 이 주소로 요청을 보낸다는 것이고 추가적으로 method="post" 라고 명시를 해준다.
form 만 있다고 해서 끝나는것이 아닌 어떤 상호작용을 해야지 서버로 보내는것이기 떄문에 input 태그의 타입 submit 으로 버튼을 하나 만들고 버튼 모양도 다음과 같이 지정 <input type="submit" class="btn btn-primary"> ->
강의 초반에 부트스트랩을 적용했었는데 btn btn-primary 는 그 라이브러리 안에 있는 클래스들 중 하나이다. 그래서 이 btn 과 btn-primary 이 둘을 동시에 적용하게 되면 이제 primary 의 색을 가진 그
럴듯한 버튼이 만들어진다.
버튼 안에 들어갈 텍스트는 value 값으로 지정 -> value="POST"


POST 라는 버튼이 하나 생겼고 버튼 클릭시 패아자 오류가 뜬다.
장고를 이용해서 POST 메소드를 사용해서 서버에 요청을 보낼 떄는 항상 {% csrf_token %} 이라는것을 form 안에 명시를 해줘야한다.
# hello_world.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">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="POST">
</form>
</div>
{% endblock %}
이후 POST 버튼을 눌러도 큰 변화가 없다. 왜냐하면 우리가 만든 view 단에서 요청을 처리하는 부분에 POST 와 GET 을 나눠서 처리해줄 뭔가 다른 알고리즘을 적용하지 않았기 떄문이다.
# views.py
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
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!!'})
요청을 받은 객체 안에서 method 를 찾는데 POST 메소드일 경우 기존의 rendering 방식을 쓰는데 그 안에 추가적으로 context 라는 데이터 꾸러미 안에 'text' 라는 이름을 가지고 있고 내용물은 'POST METHOD!!' 라는 문장을 리턴해줄것임.
<!--hello_world.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">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="POST">
</form>
<h1>
{{ text }}
</h1>
</div>
{% endblock %}
이것을 html 단으로 보내주기 위해서 hello_world.html 문서에 쌍 중괄호({{) 를 열고 text 라고 보내진 이 데이터 이름을 명시해주고, 만약 이 text 가 존재한다면 장고가 이 부분에다가 아까 작성했던 'POST METHOD!!' 이라는 내용을 적어서 리턴해주게 된다. 나머지의 경우에는 GET METHOD 라고 문장을 보내줄 것이다.


이 post 메서드가 어떤 객체를 생성할 떄 주로 쓰는데, HelloWorld 객체를 만들어서 db 에 저장하는것을 다음 시간에 배운다.

문제 :
url 을 http://127.0.0.1:8000/account/hello_world/ 뒤에 슬래시를 추가한 경우에는 렌더링이 안됬는데
urls.py 파일의 path 설정을 다음과 같이 수정하여 해결
urlpatterns = {
path('hello_world/', hello_world, name='hello_world')
} # / 추가
5강 routing 부분 수정