POST 폼
Coddy Django 여정의 폼 섹션에 포함된 레슨. 20개 중 2번째.
/events/new/ 페이지와 해당 뷰는 준비되었지만, 페이지에는 이벤트를 추가할 양식이 없습니다. 데이터를 변경하는 양식은 method="post"를 사용합니다. 브라우저는 필드를 URL이 아니라 요청 본문에 담아 전송합니다. 뷰는 각 입력란의 name을 키로 삼아 request.POST에서 값을 읽습니다.
Django에는 규칙이 하나 더 있습니다. 다른 웹사이트에서 사용자의 사이트로 데이터를 보내는 양식을 숨겨 놓을 수 있으며, 방문자의 브라우저는 쿠키와 함께 해당 양식을 전송합니다. 이를 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"는 달력을 표시합니다.
챌린지
쉬움new_event.html에서 뷰가 기대하는 양식(form)을 작성하세요.
- 양식은 POST 방식으로 필드를 전송하고 CSRF 토큰을 포함합니다.
- 뷰가 읽는 각 값마다 레이블이 있는 입력란을 하나씩 만드세요. 날짜 입력란에는 달력이 표시됩니다.
- 제출 버튼을 추가하세요.
실행을 누르고 이벤트를 추가한 다음 홈 페이지를 여세요.
직접 해보기
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# 여기에 폼을 작성하세요 #}
{% endblock %}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
폼의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드