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' %} # 틀린 예시