1. 데이터 전송 방식 (GET)

  • URL로 데이터 전송하는 방식으로 URL의 특수 기호와 역할이 있음 (?: 데이터 전송의 시작 / &: 데이터 연결)
  • ?name=kim&age=38&where=suwon (name, age. where 라는 데이터가 GET방식으로 전송)
  • URL 노출이 되기 때문에 민감한 데이터 전송에는 부적절함 (로그인)
  • ULR 길이제한이 있기대문에 다량의 정보전송에는 부적절함 (게시판)
  • GET은 결국 서버에서 데이터를 가져와 보여주는 용도로 서버의 값이나 상태를 바꾸지는 않음

2. 데이터 전송 방식 (POST)

  • HTTP Body에 데이터를 숨겨서 전송
  • 대형서비스를 지원하기에는 Packet을 까서 정보를 확인해야하기 때문에 리소스를 많이 잡아 먹게 됨
  • URL에서는 안보이나 크롬 개발자 모드에서 Network > Payload를 보면 정보 확인이 가능 함
  • POST는 서버의 값이나 상태를 바꾸기 위해 사용 함

 

3. 데이터 전송 태그 form

  • method: 어떻게 데이터를 전송할지 지정해주는 속성으로, 지정이 없을 경우 GET방식으로 전송됨. (GET, POST, PUT, DELETE, UPDATE...)
  • action: 어디로 데이터를 전송할지 지정해주는속성으로, 지정이 없을 경우 현재 페이지에 전송을 함. 
    예) <form method="POST" action="A"> : A에다가 POST방식으로 데이터를 전송하겠다.
  • Django 에서는 CSRF(Cross Site RequestForgery) 공격을 감지하기 때문에 csrf_token을 같이 전달(form안에 있어야함) 해줘야 요청으로 인정
  • form태그 주의 사항으로 form태그 안에 작성된 정보들만 넘어가며, 그 중에서도 name속성을 주지 않은 정보들은 넘어가지 않는다. 아래 코드에서는 subject만 서버로 전달되는데, writer는 name이 지정되지 않았고, content는 form 태그 밖에 있기 때문에 전달 되지 않음.
<form method="post">
	subject <input type="text" name="sub">
	writer <input type="text">
	<button>submit</button>
</form>
content <input type="text" name="con">
  • 아래와 같은 방법으로 POST 방식으로 데이터 전송이 이루어짐
<form method="POST" action="{% url 'board:creply' b.id%}">
    {% csrf_token %}
    <div class ="row">
        <div class="col-lg-10">
            <textarea class="form-control" name="comm" style="height:100px" placeholder="댓글을 남겨주세요"></textarea>
        </div>
        <div class="col-lg-2" style="margin: auto;">
            <button class="btn btn-dark">댓글생성</button>
        </div>
    </div>
</form>

+ Recent posts