POST 폼
Coddy Django 여정의 폼 섹션에 포함된 레슨. 20개 중 2번째.
페이지 /events/new/와 해당 뷰는 준비되었지만, 이벤트를 추가할 양식은 없습니다. 데이터를 변경하는 양식은 method="post"를 사용합니다. 브라우저는 필드를 URL이 아니라 요청 본문에 담아 전송합니다. 뷰는 각 입력의 name을 키로 사용해 request.POST에서 필드를 읽습니다.
Django는 모든 POST 양식도 보호합니다. 다른 웹사이트가 사용자의 사이트로 POST 요청을 보내는 양식을 숨겨 둘 수 있으며, 방문자의 브라우저는 쿠키와 함께 그 요청을 전송하게 됩니다. 이 공격은 사이트 간 요청 위조라고 하며, 줄여서 CSRF라고 합니다. 따라서 Django는 자체 페이지에서 발급한 비밀 토큰이 없는 POST 요청을 모두 거부하고 403 Forbidden 응답을 보냅니다. 양식 안의 {% csrf_token %}은 해당 토큰을 작성합니다. 뉴스레터 양식은 다음과 같습니다.
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form><label>은 for가 일치하는 id를 가진 입력의 이름을 지정하며, type="date"는 달력을 표시합니다.
챌린지
쉬움events/templates/events/new_event.html에서 {# Write the form here #}를 양식으로 바꾸세요.
method="post"를 사용하고{% csrf_token %}을 맨 앞에 넣으세요. 이 토큰이 없으면 Django가 403 오류로 양식을 거부합니다.title,date(type="date"사용),place에 레이블이 있는 입력란을 추가한 다음 제출 버튼을 추가하세요.
이벤트를 추가한 다음 ‘모든 이벤트’를 누르세요. 목록에 표시됩니다.
직접 해보기
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# 여기에 폼을 작성하세요 #}
{% endblock %}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
폼의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드