Django: HTML Form

박정환·2022년 7월 9일
0

특성
  • action : 입력한 form을 보낼 URI. 이 특성이 없으면 현재 URI로 양식이 보내짐.

  • method : 양식을 제출할 때 사용할 HTTP 메소드(POST or GET 중 하나)

    <form action="{% url 'create' %}" method="POST">
      {% csrf_token %}
      <div>
          <label for="title">제목</label></br>
          <input type="text" name="title" id="title">
      </div>
    
      <div>
          <label for="body">내용</label>
          <textarea name="body" id="body"></textarea>
      </div>
    
      <input type="submit" value="글 생성하기">
    </form>

form을 위와 같이 작성하고 submit을 누르면 create라는 이름을 가진 url로 POST 요청을 보내게 된다.

그러면 create가 받는 request의 POST 객체에는 다음의 정보가 담긴다.

<QueryDict: {'csrfmiddlewaretoken':
['PxmP2WIJV2ugb0kLHVQqhnAIJzTsj9ffvnF2t03YGZa2szGyPcqANNHhBO87682q'], 
'title': ['asdf'], 
'body': ['asdf']}>

create 함수는 전달받은 정보를 DB에 저장해야 한다.
models에 저장한 객체를 불러와 request에 함께 온 데이터를 저장하고, save()함수를 호출해야 한다. save() 함수는 SQL의 INSERT 명령문을 수행하는 것이다. DB에 저장한 후에는 사용자가 돌아가야 하는 url을 redirect()문에 넣어서 리턴해준다.

이때 redirect의 매개변수로 urls.py에 정의한 name을 넣어줘도 된다. 이때{% url 'name' %} 형태가 아니라 'name' 그 자체를 넣어주면 된다.

return redirect('home') # 올바른 예시

return redirect("{% url 'home' %} # 틀린 예시 

0개의 댓글