Menu
CoddyTech

Biểu mẫu POST

Thuộc phần Biểu mẫu trong hành trình Django của Coddy. Bài học 2 trên 20.

Trang /events/new/ và view của trang đã sẵn sàng, nhưng trang chưa có biểu mẫu để thêm sự kiện. Biểu mẫu làm thay đổi dữ liệu dùng method="post": trình duyệt gửi các trường trong phần thân của yêu cầu, không phải trong URL. View đọc dữ liệu từ request.POST, theo name của từng ô nhập.

Django cũng bảo vệ mọi biểu mẫu POST. Một trang web khác có thể ẩn biểu mẫu gửi dữ liệu đến trang của bạn, rồi trình duyệt của khách truy cập sẽ gửi biểu mẫu đó kèm cookie của họ. Kiểu tấn công này gọi là giả mạo yêu cầu liên trang, viết tắt là CSRF. Vì vậy, Django từ chối mọi POST không có mã thông báo bí mật từ chính trang của bạn và trả về 403 Forbidden. {% csrf_token %} bên trong biểu mẫu sẽ ghi mã thông báo đó. Biểu mẫu đăng ký nhận bản tin:

<form method="post">
    {% csrf_token %}
    <label for="email">Email</label>
    <input id="email" name="email" type="email">
    <button type="submit">Subscribe</button>
</form>

<label> đặt tên cho ô nhập có id khớp với thuộc tính for của nhãn đó, còn type="date" hiển thị lịch.

challenge icon

Thử thách

Dễ

Trong events/templates/events/new_event.html, thay {# Write the form here #} bằng một biểu mẫu.

  1. Dùng method="post" và đặt {% csrf_token %} lên đầu. Nếu thiếu phần này, Django sẽ từ chối biểu mẫu với lỗi 403.
  2. Thêm nhãn và ô nhập liệu cho title, date (với type="date") và place, sau đó thêm nút gửi.

Thêm một sự kiện, rồi nhấn Tất cả sự kiện: sự kiện đó sẽ có trong danh sách.

Tự làm thử

{% extends "events/base.html" %}

{% block title %}Add an event{% endblock %}

{% block content %}
<h1>Add an event</h1>
{# Viết biểu mẫu ở đây #}
{% endblock %}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Biểu mẫu

Tự luyện tập: Playground Django