반응형

GET과 POST의 공통점서버에 Request 요청을 하는 메소드라점입니다.

 

Ex) 홈페이지에 로그인 등의 작업을 처리할때 사용자(클라이언트)가 폼을 작성후 요청(Request)하는 동작을 의미합니다.

 

GET이 POST와의 차이점클라이언트의 요청이 URL 뒤에 추가되어서 요청되는 점입니다.

 

GET 방식(가져온다) 의 특징으로는 SELECT 쿼리문과 유사한 성격을 가지며, POST보다 전송속도가 빠르다.

왜냐하면, GET 방식은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다) 에 의하여 빠른효과를 나타냅니다.

 

ex) www.xxx.com?id=aaa&bbb=111 과 같이 작성됩니다. 

 

위 예와 같이 도메인 뒤에 ?가 붙여지며 ?  뒤는 데이터가 들어온다는 것을 의미합니다.

 

URL 형태로 출력되기 때문에 특정 페이지를 타인이 접속 가능하며, URL의 길이가 한정되어있기 때문에 보내는 양의 한계가 존재합니다.

 

반면, POST 방식(수행한다)URL이 아닌 BODY에 데이터를 넣어서 숨겨진 상태로 전송해주는 방식입니다.

보통 HTML에서 form 형태를 이용하여 submit을 사용합니다.

 

<h3> * 방명록 글쓰기 *</h3>
<form action="/guest/insertok" method="post"> <!-- 위조 방지로 다음 문장 작성 --> {% csrf_token %} 
  <table>
    <tr>
      <td>제목</td>
	  <td><input type="text" name="title" size="50"></td>
	</tr>
	<tr>
	  <td>글내용</td>
	  <td><textarea rows='5' cols='50' name="content"></textarea></td>
	</tr>
	<tr>
	  <td colspan="2" style="text-align: center;">
	  <input type="submit" value = "등록">
	  </td>
    </tr>
	</table>
</form>

위 작성한 Template 소스중 하나입니다. 여기서 제목 내용을 작성후 submit을 누르면 아래의 view를 거치도록 되어있습니다.

 

Django에서 POST 방식을 수행하고 싶은 경우, 사이버공격으로부터 방어하기 위해 Spring 프레임워크와 다르게 form 태그 끝에 {% csrf_token %} 을 작성해주어야한다.

 

csrf란 특정 사용자를 대상으로 하지 않고, 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격을 뜻합니다.

def InsertOkFunc(request):
    if request.method == 'POST':
        #print(request.POST.get('title')) # 밑과 같은 뜻
        #print(request.POST['title'])
        Guest(
                title = request.POST.get('title'), #.POST['title'],
                content = request.POST.get('content'),
                regdate = datetime.now()
                
        ).save() # ORM추가
        return HttpResponseRedirect('/guest') # 추가후 목록 보기로 돌아감
    else:
        return HttpResponseRedirect('/guest/insert')

 

View에서 POST방식으로 request 받은 내용들을 ORM 함수중 하나인 .save() 를 거쳐서 DB에 저장되도록 하였습니다.

 

반응형

'Django' 카테고리의 다른 글

[Django] URLS  (0) 2020.05.21
[Dango] DB 연결 및 Migrate  (0) 2020.05.21
[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19

+ Recent posts