Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách làm việc với Biểu mẫu HTML trong Django và đặc biệt là cách viết biểu mẫu dễ dàng nhất để tạo, cập nhật và xóa các phiên bản mô hình. Là một phần của cuộc trình diễn này, chúng tôi sẽ mở rộng trang web LocalLibrary để các thủ thư có thể gia hạn sách cũng như tạo, cập nhật và xóa tác giả bằng các biểu mẫu của riêng chúng tôi [thay vì sử dụng ứng dụng quản trị]
điều kiện tiên quyết. Hoàn thành tất cả các chủ đề hướng dẫn trước đó, bao gồm Hướng dẫn Django Phần 8. Xác thực người dùng và quyền. Khách quan. Hiểu cách viết biểu mẫu để lấy thông tin từ người dùng và cập nhật cơ sở dữ liệu. Để hiểu cách các chế độ xem chỉnh sửa dựa trên lớp chung có thể đơn giản hóa rất nhiều việc tạo biểu mẫu để làm việc với một mô hình duy nhấtTổng quan
Biểu mẫu HTML là một nhóm gồm một hoặc nhiều trường/widget trên trang web, có thể được sử dụng để thu thập thông tin từ người dùng để gửi tới máy chủ. Biểu mẫu là một cơ chế linh hoạt để thu thập thông tin đầu vào của người dùng vì có các tiện ích phù hợp để nhập nhiều loại dữ liệu khác nhau, bao gồm hộp văn bản, hộp kiểm, nút radio, bộ chọn ngày, v.v. Biểu mẫu cũng là một cách tương đối an toàn để chia sẻ dữ liệu với máy chủ, vì chúng cho phép chúng tôi gửi dữ liệu theo yêu cầu
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9 với tính năng bảo vệ giả mạo yêu cầu trên nhiều trang webMặc dù chúng tôi chưa tạo bất kỳ biểu mẫu nào trong hướng dẫn này cho đến nay, nhưng chúng tôi đã gặp chúng trong trang Quản trị Django - ví dụ: ảnh chụp màn hình bên dưới hiển thị biểu mẫu để chỉnh sửa một trong các mô hình Sách của chúng tôi, bao gồm một số danh sách lựa chọn
Làm việc với các biểu mẫu có thể phức tạp. Nhà phát triển cần viết HTML cho biểu mẫu, xác thực và làm sạch đúng cách dữ liệu đã nhập trên máy chủ [và có thể cả trong trình duyệt], đăng lại biểu mẫu có thông báo lỗi để thông báo cho người dùng về bất kỳ trường không hợp lệ nào, xử lý dữ liệu khi đã gửi thành công . Django Forms thực hiện rất nhiều công việc trong tất cả các bước này, bằng cách cung cấp một khung cho phép bạn xác định biểu mẫu và các trường của chúng theo chương trình, sau đó sử dụng các đối tượng này để tạo mã HTML biểu mẫu và xử lý phần lớn quá trình xác thực và tương tác người dùng
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn một số cách bạn có thể tạo và làm việc với các biểu mẫu, và đặc biệt là cách các dạng xem chỉnh sửa chung có thể giảm đáng kể số lượng công việc bạn cần thực hiện để tạo các biểu mẫu để thao tác với bạn. . Đồng thời, chúng tôi sẽ mở rộng ứng dụng LocalLibrary của mình bằng cách thêm một biểu mẫu cho phép thủ thư gia hạn sách thư viện và chúng tôi sẽ tạo các trang để tạo, chỉnh sửa và xóa sách và tác giả [sao chép phiên bản cơ bản của biểu mẫu được hiển thị ở trên để chỉnh sửa
Biểu mẫu HTML
Đầu tiên, tổng quan ngắn gọn về Biểu mẫu HTML. Hãy xem xét một biểu mẫu HTML đơn giản, với một trường văn bản duy nhất để nhập tên của một số "nhóm" và nhãn được liên kết của nó
Biểu mẫu được định nghĩa trong HTML là tập hợp các phần tử bên trong thẻ
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
0, chứa ít nhất một phần tử import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
1 của import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
2
Enter name:
Mặc dù ở đây chúng ta chỉ có một trường văn bản để nhập tên nhóm, một biểu mẫu có thể có bất kỳ số lượng thành phần đầu vào nào khác và nhãn liên quan của chúng. Thuộc tính
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3 của trường xác định loại tiện ích nào sẽ được hiển thị. import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
4 và import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
5 của trường được sử dụng để xác định trường trong JavaScript/CSS/HTML, trong khi import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
6 xác định giá trị ban đầu cho trường khi nó được hiển thị lần đầu. Nhãn nhóm phù hợp được chỉ định bằng cách sử dụng thẻ import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
7 [xem phần "Nhập tên" ở trên], với trường import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
8 chứa giá trị import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
5 của import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
1 được liên kếtTheo mặc định, đầu vào
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
31 sẽ được hiển thị dưới dạng nút. Có thể nhấn nút này để tải dữ liệu trong tất cả các thành phần đầu vào khác trong biểu mẫu lên máy chủ [trong trường hợp này, chỉ trường import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
32]. Các thuộc tính biểu mẫu xác định HTTP import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
33 được sử dụng để gửi dữ liệu và đích của dữ liệu trên máy chủ [import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34]
34. Tài nguyên/URL nơi dữ liệu sẽ được gửi để xử lý khi biểu mẫu được gửi. Nếu điều này không được đặt [hoặc được đặt thành một chuỗi trống], thì biểu mẫu sẽ được gửi trở lại URL của trang hiện tạiimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
33. Phương thức HTTP được sử dụng để gửi dữ liệu. đăng hoặc nhậnimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
- Phương pháp
9 phải luôn được sử dụng nếu dữ liệu sẽ dẫn đến thay đổi cơ sở dữ liệu của máy chủ, bởi vì nó có thể được tạo ra để chống lại các cuộc tấn công yêu cầu giả mạo giữa các trang webfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
- Chỉ nên sử dụng phương pháp
38 cho các biểu mẫu không thay đổi dữ liệu người dùng [ví dụ: biểu mẫu tìm kiếm]. Nó được khuyến nghị khi bạn muốn có thể đánh dấu hoặc chia sẻ URLimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
- Phương pháp
Vai trò của máy chủ trước tiên là hiển thị trạng thái biểu mẫu ban đầu — có chứa các trường trống hoặc được điền sẵn các giá trị ban đầu. Sau khi người dùng nhấn nút gửi, máy chủ sẽ nhận dữ liệu biểu mẫu với các giá trị từ trình duyệt web và phải xác thực thông tin. Nếu biểu mẫu chứa dữ liệu không hợp lệ, máy chủ sẽ hiển thị lại biểu mẫu, lần này với dữ liệu do người dùng nhập vào các trường "hợp lệ" và thông báo để mô tả sự cố đối với các trường không hợp lệ. Khi máy chủ nhận được yêu cầu với tất cả dữ liệu biểu mẫu hợp lệ, nó có thể thực hiện một hành động thích hợp [chẳng hạn như. lưu dữ liệu, trả về kết quả tìm kiếm, tải tệp lên, v.v. ] và sau đó thông báo cho người dùng
Như bạn có thể tưởng tượng, việc tạo HTML, xác thực dữ liệu được trả về, hiển thị lại dữ liệu đã nhập với các báo cáo lỗi nếu cần và thực hiện thao tác mong muốn trên dữ liệu hợp lệ đều có thể mất khá nhiều nỗ lực để "làm đúng". Django làm cho điều này dễ dàng hơn rất nhiều bằng cách loại bỏ một số mã lặp đi lặp lại và nâng nặng
Quy trình xử lý biểu mẫu Django
Việc xử lý biểu mẫu của Django sử dụng tất cả các kỹ thuật giống như chúng ta đã học trong các hướng dẫn trước [để hiển thị thông tin về các mô hình của chúng ta]. chế độ xem nhận yêu cầu, thực hiện bất kỳ hành động nào được yêu cầu bao gồm đọc dữ liệu từ các mô hình, sau đó tạo và trả về trang HTML [từ mẫu, trong đó chúng tôi chuyển ngữ cảnh chứa dữ liệu sẽ được hiển thị]. Điều khiến mọi thứ trở nên phức tạp hơn là máy chủ cũng cần có khả năng xử lý dữ liệu do người dùng cung cấp và hiển thị lại trang nếu có bất kỳ lỗi nào
Sơ đồ quy trình về cách Django xử lý các yêu cầu biểu mẫu được hiển thị bên dưới, bắt đầu bằng một yêu cầu cho trang chứa biểu mẫu [hiển thị màu xanh lá cây]
Dựa trên sơ đồ trên, những điều chính mà việc xử lý biểu mẫu của Django thực hiện là
- Hiển thị biểu mẫu mặc định khi người dùng yêu cầu lần đầu tiên
- Biểu mẫu có thể chứa các trường trống nếu bạn đang tạo một bản ghi mới hoặc nó có thể được điền sẵn các giá trị ban đầu [ví dụ: nếu bạn đang thay đổi một bản ghi hoặc có các giá trị ban đầu mặc định hữu ích]
- Tại thời điểm này, biểu mẫu được gọi là không liên kết vì nó không được liên kết với bất kỳ dữ liệu nào do người dùng nhập [mặc dù nó có thể có các giá trị ban đầu]
- Nhận dữ liệu từ một yêu cầu gửi và liên kết nó với biểu mẫu
- Liên kết dữ liệu với biểu mẫu có nghĩa là dữ liệu do người dùng nhập và mọi lỗi đều có sẵn khi chúng tôi cần hiển thị lại biểu mẫu
- Làm sạch và xác thực dữ liệu
- Làm sạch dữ liệu thực hiện làm sạch các trường đầu vào, chẳng hạn như xóa các ký tự không hợp lệ có thể được sử dụng để gửi nội dung độc hại đến máy chủ và chuyển đổi chúng thành các loại Python nhất quán
- Quá trình xác thực kiểm tra xem các giá trị có phù hợp với trường hay không [ví dụ: chúng có nằm trong phạm vi ngày phù hợp không, không quá ngắn hoặc quá dài, v.v. ]
- Nếu bất kỳ dữ liệu nào không hợp lệ, hãy hiển thị lại biểu mẫu, lần này với mọi giá trị do người dùng điền và thông báo lỗi cho các trường có vấn đề
- Nếu tất cả dữ liệu đều hợp lệ, hãy thực hiện các hành động bắt buộc [chẳng hạn như lưu dữ liệu, gửi email, trả về kết quả tìm kiếm, tải tệp lên, v.v.]
- Khi tất cả các hành động hoàn tất, hãy chuyển hướng người dùng đến một trang khác
Django cung cấp một số công cụ và cách tiếp cận để giúp bạn thực hiện các nhiệm vụ được nêu chi tiết ở trên. Cơ bản nhất là lớp
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39, giúp đơn giản hóa cả việc tạo biểu mẫu HTML và làm sạch/xác thực dữ liệu. Trong phần tiếp theo, chúng tôi mô tả cách các biểu mẫu hoạt động bằng cách sử dụng ví dụ thực tế về một trang để cho phép thủ thư gia hạn sáchGhi chú. Hiểu cách sử dụng
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 sẽ giúp ích cho bạn khi chúng ta thảo luận về các lớp khung biểu mẫu "cấp cao" hơn của DjangoGia hạn biểu mẫu sách bằng cách sử dụng dạng xem Biểu mẫu và chức năng
Tiếp theo, chúng tôi sẽ thêm một trang cho phép thủ thư gia hạn sách mượn. Để làm điều này, chúng tôi sẽ tạo một biểu mẫu cho phép người dùng nhập giá trị ngày. Chúng tôi sẽ chọn trường có giá trị ban đầu 3 tuần kể từ ngày hiện tại [thời gian mượn bình thường] và thêm một số xác thực để đảm bảo rằng thủ thư không thể nhập ngày trong quá khứ hoặc ngày quá xa trong tương lai. Khi một ngày hợp lệ đã được nhập vào, chúng tôi sẽ ghi nó vào trường
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
31 của bản ghi hiện tạiVí dụ sẽ sử dụng chế độ xem dựa trên chức năng và lớp
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39. Các phần sau đây giải thích cách thức hoạt động của các biểu mẫu và những thay đổi bạn cần thực hiện đối với dự án LocalLibrary đang diễn ra của chúng tôiHình thức
Lớp
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 là trung tâm của hệ thống xử lý biểu mẫu của Django. Nó chỉ định các trường trong biểu mẫu, bố cục của chúng, tiện ích hiển thị, nhãn, giá trị ban đầu, giá trị hợp lệ và [sau khi được xác thực] các thông báo lỗi được liên kết với các trường không hợp lệ. Lớp này cũng cung cấp các phương thức để hiển thị chính nó trong các mẫu sử dụng các định dạng được xác định trước [bảng, danh sách, v.v. ] hoặc để lấy giá trị của bất kỳ phần tử nào [cho phép hiển thị thủ công chi tiết]Khai báo một Form
Cú pháp khai báo cho
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 rất giống với cú pháp khai báo cho import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
35 và chia sẻ cùng loại trường [và một số tham số tương tự]. Điều này có ý nghĩa vì trong cả hai trường hợp, chúng tôi cần đảm bảo rằng mỗi trường xử lý đúng loại dữ liệu, bị ràng buộc với dữ liệu hợp lệ và có mô tả để hiển thị/tài liệuDữ liệu biểu mẫu được lưu trữ trong biểu mẫu của ứng dụng. py, bên trong thư mục ứng dụng. Tạo và mở tệp locallibrary/catalog/forms. py. Để tạo một
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39, chúng tôi nhập thư viện import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
37, lấy từ lớp import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 và khai báo các trường của biểu mẫu. Một lớp biểu mẫu rất cơ bản cho biểu mẫu gia hạn sách thư viện của chúng tôi được hiển thị bên dưới — hãy thêm biểu mẫu này vào tệp mới của bạnfrom django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
trường biểu mẫu
Trong trường hợp này, chúng tôi có một
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 duy nhất để nhập ngày gia hạn sẽ hiển thị trong HTML với một giá trị trống, nhãn mặc định "Ngày gia hạn. ", và một số văn bản sử dụng hữu ích. "Nhập một ngày từ bây giờ đến 4 tuần [3 tuần mặc định]. " Vì không có đối số tùy chọn nào khác được chỉ định nên trường sẽ chấp nhận ngày bằng cách sử dụng input_formats. YYYY-MM-DD [2016-11-06], MM/DD/YYYY [26/02/2016], MM/DD/YY [25/10/16] và sẽ được hiển thị bằng tiện ích con mặc định. Nhập ngàyCó nhiều loại trường biểu mẫu khác mà bạn sẽ nhận ra phần lớn từ sự giống nhau của chúng với các lớp trường mô hình tương đương
30import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
31import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
32import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
33import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
39import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
35import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
36import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
37import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
38import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
39import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
30Enter name:
31Enter name:
32Enter name:
33Enter name:
34Enter name:
35Enter name:
36Enter name:
37Enter name:
38Enter name:
39Enter name:
30import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
31import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
32import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
33import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
34import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
35import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
36import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
37import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
Các đối số phổ biến đối với hầu hết các trường được liệt kê bên dưới [các đối số này có giá trị mặc định hợp lý]
38. Nếuimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
39, trường này không được để trống hoặc có giá trịimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
30. Các trường được yêu cầu theo mặc định, vì vậy bạn sẽ đặtimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
31 để cho phép các giá trị trống trong biểu mẫuimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
7. Nhãn sẽ sử dụng khi hiển thị trường trong HTML. Nếu nhãn không được chỉ định, Django sẽ tạo một nhãn từ tên trường bằng cách viết hoa chữ cái đầu tiên và thay dấu gạch dưới bằng dấu cách [e. g. Ngày gia hạn]import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
33. Theo mặc định, dấu hai chấm được hiển thị sau nhãn [e. g. Ngày gia hạn. ]. Đối số này cho phép bạn chỉ định một hậu tố khác chứa [các] ký tự khácimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
34. Giá trị ban đầu cho trường khi biểu mẫu được hiển thịimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
35. Tiện ích hiển thị để sử dụngimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
36 [như đã thấy trong ví dụ trên]. Văn bản bổ sung có thể được hiển thị trong biểu mẫu để giải thích cách sử dụng trườngimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
37. Danh sách các thông báo lỗi cho trường. Bạn có thể ghi đè những điều này bằng tin nhắn của riêng bạn nếu cầnimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
38. Danh sách các chức năng sẽ được gọi trên trường khi nó được xác thựcimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
39. Cho phép bản địa hóa đầu vào dữ liệu biểu mẫu [xem liên kết để biết thêm thông tin]import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
30. Trường được hiển thị nhưng giá trị của nó không thể chỉnh sửa được nếu đây làimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
39. Mặc định làimport datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
32import datetime from django import forms from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."] def clean_renewal_date[self]: data = self.cleaned_data['renewal_date'] # Check if a date is not in the past. if data datetime.date.today[] + datetime.timedelta[weeks=4]: raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']] # Remember to always return the cleaned data. return data
Thẩm định
Django cung cấp nhiều nơi bạn có thể xác thực dữ liệu của mình. Cách dễ nhất để xác thực một trường là ghi đè phương thức
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
33 cho trường bạn muốn kiểm tra. Vì vậy, ví dụ: chúng tôi có thể xác thực rằng các giá trị import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34 đã nhập là từ bây giờ đến 4 tuần bằng cách triển khai import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
35 như được hiển thị bên dướiCập nhật biểu mẫu của bạn. py để nó trông như thế này
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
Có hai điều quan trọng cần lưu ý. Đầu tiên là chúng tôi lấy dữ liệu của mình bằng cách sử dụng
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
36 và chúng tôi trả lại dữ liệu này cho dù chúng tôi có thay đổi dữ liệu đó ở cuối hàm hay không. Bước này giúp chúng tôi "làm sạch" dữ liệu và khử trùng đầu vào có khả năng không an toàn bằng cách sử dụng trình xác thực mặc định và chuyển đổi thành loại tiêu chuẩn chính xác cho dữ liệu [trong trường hợp này là đối tượng Python import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
37]Điểm thứ hai là nếu một giá trị nằm ngoài phạm vi của chúng tôi, chúng tôi sẽ tăng
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
38, chỉ định văn bản lỗi mà chúng tôi muốn hiển thị trong biểu mẫu nếu nhập một giá trị không hợp lệ. Ví dụ trên cũng bao bọc văn bản này bằng một trong các chức năng dịch thuật của Django, import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 [được nhập dưới dạng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
00], đây là cách thực hành tốt nếu bạn muốn dịch trang web của mình sau nàyGhi chú. Có nhiều phương pháp và ví dụ khác để xác thực biểu mẫu trong Xác thực biểu mẫu và trường [Django docs]. Ví dụ, trong trường hợp bạn có nhiều trường phụ thuộc lẫn nhau, bạn có thể ghi đè Form. clean[] và tăng lại một
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
38Đó là tất cả những gì chúng ta cần cho biểu mẫu trong ví dụ này
cấu hình URL
Trước khi chúng tôi tạo chế độ xem của mình, hãy thêm cấu hình URL cho trang gia hạn sách. Sao chép cấu hình sau vào cuối locallibrary/catalog/urls. py
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3The URL configuration will redirect URLs with the format /catalog/book//renew/ to the function named
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
02 in views.py, and send the from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03 id as the parameter named from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
04. The pattern only matches if from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
04 is a correctly formatted from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
06.Ghi chú. Chúng tôi có thể đặt tên cho dữ liệu URL đã thu thập của mình là "
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
04" bất cứ thứ gì chúng tôi muốn, bởi vì chúng tôi có toàn quyền kiểm soát chức năng xem [chúng tôi không sử dụng lớp chế độ xem chi tiết chung mong đợi các tham số có tên nhất định]. Tuy nhiên, from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
04 viết tắt của "khóa chính", là một quy ước hợp lý để sử dụngLượt xem
Như đã thảo luận trong quy trình xử lý biểu mẫu Django ở trên, chế độ xem phải hiển thị biểu mẫu mặc định khi nó được gọi lần đầu tiên và sau đó hiển thị lại với thông báo lỗi nếu dữ liệu không hợp lệ hoặc xử lý dữ liệu và chuyển hướng đến một trang mới nếu . Để thực hiện các hành động khác nhau này, chế độ xem phải có khả năng biết liệu nó được gọi lần đầu tiên để hiển thị biểu mẫu mặc định hay lần tiếp theo để xác thực dữ liệu
Đối với các biểu mẫu sử dụng yêu cầu
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9 để gửi thông tin đến máy chủ, mẫu phổ biến nhất là để chế độ xem kiểm tra loại yêu cầu from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9 [from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
11] để xác định các yêu cầu xác thực biểu mẫu và import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
38 [sử dụng điều kiện from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
13] để xác định biểu mẫu ban đầu . Nếu bạn muốn gửi dữ liệu của mình bằng yêu cầu import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
38, thì cách tiếp cận điển hình để xác định xem đây là lần gọi chế độ xem đầu tiên hay tiếp theo là đọc dữ liệu biểu mẫu [e. g. để đọc một giá trị ẩn trong biểu mẫu]Quá trình gia hạn sách sẽ được ghi vào cơ sở dữ liệu của chúng tôi, vì vậy, theo quy ước, chúng tôi sử dụng phương pháp yêu cầu
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9. Đoạn mã bên dưới hiển thị mẫu [rất chuẩn] cho loại chế độ xem chức năng nàyimport datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3Đầu tiên, chúng tôi nhập biểu mẫu của mình [
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
16] và một số đối tượng/phương thức hữu ích khác được sử dụng trong phần thân của hàm xem
17. Trả về một đối tượng đã chỉ định từ một mô hình dựa trên giá trị khóa chính của nó và đưa ra một ngoại lệfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
18 [không tìm thấy] nếu bản ghi không tồn tạifrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
19. Điều này tạo ra một chuyển hướng đến một URL được chỉ định [mã trạng thái HTTP 302]from django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
20. Điều này tạo ra một URL từ tên cấu hình URL và một tập hợp các đối số. Nó tương đương với Python của thẻfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
21 mà chúng tôi đang sử dụng trong các mẫu của mìnhfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
22. Một thư viện Python để thao tác ngày và giờfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
Trong chế độ xem, trước tiên chúng tôi sử dụng đối số
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
04 trong from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
17 để lấy from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03 hiện tại [nếu điều này không tồn tại, chế độ xem sẽ thoát ngay lập tức và trang sẽ hiển thị lỗi "không tìm thấy"]. Nếu đây không phải là yêu cầu from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9 [được xử lý bởi mệnh đề from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
13] thì chúng tôi tạo biểu mẫu mặc định chuyển giá trị import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34 cho trường import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34, 3 tuần kể từ ngày hiện tạiimport datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3Sau khi tạo biểu mẫu, chúng tôi gọi
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
30 để tạo trang HTML, chỉ định mẫu và ngữ cảnh chứa biểu mẫu của chúng tôi. Trong trường hợp này, ngữ cảnh cũng chứa from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03 của chúng tôi, mà chúng tôi sẽ sử dụng trong mẫu để cung cấp thông tin về cuốn sách mà chúng tôi đang gia hạnTuy nhiên, nếu đây là yêu cầu
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9, thì chúng tôi tạo đối tượng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
33 của mình và điền vào đó dữ liệu từ yêu cầu. Quá trình này được gọi là "ràng buộc" và cho phép chúng tôi xác thực biểu mẫuSau đó, chúng tôi kiểm tra xem biểu mẫu có hợp lệ hay không, biểu mẫu này sẽ chạy tất cả mã xác thực trên tất cả các trường — bao gồm cả mã chung để kiểm tra xem trường ngày của chúng ta có thực sự là một ngày hợp lệ hay không và hàm
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
35 của biểu mẫu cụ thể để kiểm tra xem ngày có nằm trong
Enter name:
3Nếu biểu mẫu không hợp lệ, chúng tôi gọi lại
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
30, nhưng lần này giá trị biểu mẫu được truyền trong ngữ cảnh sẽ bao gồm các thông báo lỗiNếu biểu mẫu hợp lệ, thì chúng ta có thể bắt đầu sử dụng dữ liệu, truy cập nó thông qua thuộc tính
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
36 [e. g. from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
37]. Ở đây, chúng ta chỉ lưu dữ liệu vào giá trị from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
38 của đối tượng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03 được liên kếtCảnh báo. Mặc dù bạn cũng có thể truy cập dữ liệu biểu mẫu trực tiếp thông qua yêu cầu [ví dụ:
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
40 hoặc from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
41 nếu sử dụng yêu cầu GET], điều này KHÔNG được khuyến nghị. Dữ liệu đã làm sạch được vệ sinh, xác thực và chuyển đổi thành các loại thân thiện với PythonBước cuối cùng trong phần xử lý biểu mẫu của chế độ xem là chuyển hướng đến một trang khác, thường là trang "thành công". Trong trường hợp này, chúng tôi sử dụng
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
19 và from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
20 để chuyển hướng đến chế độ xem có tên from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
44 [điều này được tạo ra dưới dạng "thử thách" trong Hướng dẫn Django Phần 8. xác thực người dùng và quyền]. Nếu bạn không tạo trang đó, hãy cân nhắc chuyển hướng đến trang chủ tại URL 'from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
45']Đó là mọi thứ cần thiết cho việc xử lý biểu mẫu, nhưng chúng tôi vẫn cần hạn chế quyền truy cập vào chế độ xem đối với những thủ thư đã đăng nhập và có quyền gia hạn sách. Chúng tôi sử dụng
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
46 để yêu cầu người dùng đăng nhập và trình trang trí chức năng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
47 với quyền from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
48 hiện có của chúng tôi để cho phép truy cập [trình trang trí được xử lý theo thứ tự]. Lưu ý rằng lẽ ra chúng ta nên tạo một cài đặt quyền mới trong from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03 ["from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
50"], nhưng chúng tôi sẽ sử dụng lại cài đặt hiện có để giữ cho ví dụ đơn giảnDo đó, chế độ xem cuối cùng như được hiển thị bên dưới. Vui lòng sao chép phần này vào cuối thư viện cục bộ/danh mục/lượt xem. py
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3Bản mẫu
Tạo mẫu được tham chiếu trong dạng xem [/catalog/templates/catalog/book_renew_librarian. html] và sao chép mã bên dưới vào đó
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3Hầu hết điều này sẽ hoàn toàn quen thuộc từ các hướng dẫn trước
Chúng tôi mở rộng mẫu cơ sở và sau đó xác định lại khối nội dung. Chúng ta có thể tham chiếu đến
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
51 [và các biến của nó] vì nó đã được truyền vào đối tượng ngữ cảnh trong hàm from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
30 và chúng ta sử dụng những giá trị này để liệt kê tên sách, người mượn và ngày đáo hạn ban đầuMã biểu mẫu tương đối đơn giản. Trước tiên, chúng tôi khai báo các thẻ
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
33, chỉ định nơi biểu mẫu sẽ được gửi [import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34] và import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
33 để gửi dữ liệu [trong trường hợp này là "HTTP from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9"] — nếu bạn nhớ lại phần tổng quan về Biểu mẫu HTML ở đầu trang . Bên trong các thẻ, chúng tôi xác định đầu vào import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
31 mà người dùng có thể nhấn để gửi dữ liệu. from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
59 được thêm ngay bên trong thẻ biểu mẫu là một phần của bảo vệ chống giả mạo trên nhiều trang web của DjangoGhi chú. Thêm
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
59 vào mọi mẫu Django mà bạn tạo sử dụng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
9 để gửi dữ liệu. Điều này sẽ làm giảm khả năng các biểu mẫu bị tấn công bởi những người dùng độc hạiTất cả những gì còn lại là biến mẫu
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
62 mà chúng tôi đã chuyển đến mẫu trong từ điển ngữ cảnh. Có lẽ không có gì đáng ngạc nhiên, khi được sử dụng như được hiển thị, điều này cung cấp kết xuất mặc định của tất cả các trường biểu mẫu, bao gồm nhãn, tiện ích con và văn bản trợ giúp của chúng — kết xuất như bên dướiimport datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
3Ghi chú. Có lẽ không rõ ràng vì chúng ta chỉ có một trường, nhưng theo mặc định, mọi trường được xác định trong hàng của bảng riêng. Kết xuất tương tự này được cung cấp nếu bạn tham chiếu biến mẫu
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
63Nếu bạn nhập một ngày không hợp lệ, bạn sẽ nhận được thêm một danh sách các lỗi được hiển thị trên trang [xem
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
64 bên dưới]from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
0Các cách khác để sử dụng biến mẫu biểu mẫu
Sử dụng
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
63 như được hiển thị ở trên, mỗi trường được hiển thị dưới dạng một hàng của bảng. Bạn cũng có thể hiển thị từng trường dưới dạng một mục danh sách [sử dụng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
66] hoặc dưới dạng một đoạn văn [sử dụng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
67]Cũng có thể có toàn quyền kiểm soát việc hiển thị từng phần của biểu mẫu bằng cách lập chỉ mục các thuộc tính của nó bằng cách sử dụng ký hiệu dấu chấm. Vì vậy, ví dụ: chúng tôi có thể truy cập một số mục riêng biệt cho trường
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34 của mình
69 Cả cánh đồngfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
70. Danh sách lỗifrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
71. Id của nhãnfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
72. Văn bản trợ giúp trườngfrom django import forms class RenewBookForm[forms.Form]: renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
Để biết thêm ví dụ về cách kết xuất biểu mẫu trong mẫu theo cách thủ công và tự động lặp lại các trường mẫu, hãy xem Làm việc với biểu mẫu > Kết xuất trường theo cách thủ công [Tài liệu Django]
Kiểm tra trang
Nếu bạn chấp nhận "thử thách" trong Hướng dẫn Django Phần 8. Xác thực và quyền của người dùng, bạn sẽ có một danh sách tất cả các sách được cho mượn trong thư viện, danh sách này chỉ hiển thị với nhân viên thư viện. Chúng tôi có thể thêm một liên kết đến trang gia hạn của mình bên cạnh mỗi mục bằng cách sử dụng mã mẫu bên dưới
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
1Ghi chú. Hãy nhớ rằng thông tin đăng nhập thử nghiệm của bạn sẽ cần phải có quyền "
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
73" để truy cập trang sách gia hạn [có thể sử dụng tài khoản siêu người dùng của bạn]Ngoài ra, bạn có thể tạo một URL kiểm tra theo cách thủ công như thế này —
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
74 [có thể nhận được một from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
75 hợp lệ bằng cách điều hướng đến trang chi tiết sách trong thư viện của bạn và sao chép trường import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
5]Nó trông như thế nào?
Nếu bạn thành công, biểu mẫu mặc định sẽ như thế này
Biểu mẫu có giá trị nhập không hợp lệ sẽ trông như thế này
Danh sách tất cả các sách có liên kết gia hạn sẽ như thế này
Mô hìnhForms
Tạo một lớp
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 bằng cách sử dụng phương pháp được mô tả ở trên rất linh hoạt, cho phép bạn tạo bất kỳ loại trang biểu mẫu nào bạn thích và liên kết nó với bất kỳ mô hình hoặc mô hình nàoTuy nhiên, nếu bạn chỉ cần một biểu mẫu để ánh xạ các trường của một mô hình thì mô hình của bạn đã xác định hầu hết thông tin mà bạn cần trong biểu mẫu của mình. trường, nhãn, văn bản trợ giúp, v.v. Thay vì tạo lại các định nghĩa mô hình trong biểu mẫu của bạn, sẽ dễ dàng hơn khi sử dụng lớp trình trợ giúp ModelForm để tạo biểu mẫu từ mô hình của bạn. Sau đó,
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
78 này có thể được sử dụng trong chế độ xem của bạn giống hệt như một import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 thông thườngMột
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
78 cơ bản chứa cùng một trường với from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
16 ban đầu của chúng tôi được hiển thị bên dưới. Tất cả những gì bạn cần làm để tạo biểu mẫu là thêm from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
82 cùng với from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
83 [from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03] được liên kết và danh sách mô hình from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
85 để đưa vào biểu mẫufrom django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
2Ghi chú. Bạn cũng có thể bao gồm tất cả các trường trong biểu mẫu bằng cách sử dụng
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
86 hoặc bạn có thể sử dụng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
87 [thay vì from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
85] để chỉ định các trường không bao gồm từ mô hình]Cả hai cách tiếp cận đều không được khuyến nghị vì các trường mới được thêm vào mô hình sau đó sẽ tự động được đưa vào biểu mẫu [nhà phát triển không nhất thiết phải xem xét các tác động bảo mật có thể xảy ra]
Ghi chú. Điều này có thể trông không đơn giản hơn nhiều so với việc chỉ sử dụng
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 [và không phải trong trường hợp này, vì chúng tôi chỉ có một trường]. Tuy nhiên nếu bạn có nhiều trường thì có thể giảm lượng code khá đáng kểPhần còn lại của thông tin đến từ các định nghĩa trường mô hình [e. g. nhãn, vật dụng, văn bản trợ giúp, thông báo lỗi]. Nếu những điều này không hoàn toàn đúng, thì chúng ta có thể ghi đè chúng trong
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
82 của mình, chỉ định một từ điển chứa trường cần thay đổi và giá trị mới của nó. Ví dụ: trong biểu mẫu này, chúng tôi có thể muốn có nhãn cho trường "Ngày gia hạn" [thay vì mặc định dựa trên tên trường. Do Back] và chúng tôi cũng muốn văn bản trợ giúp của chúng tôi dành riêng cho trường hợp sử dụng này. from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
91 bên dưới chỉ cho bạn cách ghi đè các trường này và bạn có thể đặt tương tự như vậy cho from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
92 và import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
37 nếu các giá trị mặc định không đủfrom django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
3Để thêm xác thực, bạn có thể sử dụng phương pháp tương tự như đối với một
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 thông thường — bạn xác định một hàm có tên là from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
95 và đưa ra các ngoại lệ import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
38 cho các giá trị không hợp lệ. Sự khác biệt duy nhất đối với biểu mẫu ban đầu của chúng tôi là trường mô hình được đặt tên là from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
38 chứ không phải "import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34". Thay đổi này là cần thiết vì trường tương ứng trong from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
03 được gọi là from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
38from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
4Lớp
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
01 ở trên hiện có chức năng tương đương với lớp from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
16 ban đầu của chúng tôi. Bạn có thể nhập và sử dụng nó ở bất cứ nơi nào bạn hiện đang sử dụng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
16 miễn là bạn cũng cập nhật tên biến biểu mẫu tương ứng từ import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34 thành from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
38 như trong khai báo biểu mẫu thứ hai. import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
06Chế độ xem chỉnh sửa chung
Thuật toán xử lý biểu mẫu mà chúng tôi đã sử dụng trong ví dụ về chế độ xem chức năng ở trên thể hiện một mẫu cực kỳ phổ biến trong chế độ xem chỉnh sửa biểu mẫu. Django tóm tắt phần lớn "bản mẫu" này cho bạn, bằng cách tạo các dạng xem chỉnh sửa chung để tạo, chỉnh sửa và xóa các dạng xem dựa trên các mô hình. Những thứ này không chỉ xử lý hành vi "xem" mà chúng còn tự động tạo lớp biểu mẫu [một
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
78] cho bạn từ mô hìnhGhi chú. Ngoài các chế độ xem chỉnh sửa được mô tả ở đây, còn có một lớp FormView, nằm ở đâu đó giữa chế độ xem chức năng của chúng tôi và các chế độ xem chung khác về "tính linh hoạt" so với "nỗ lực viết mã". Sử dụng
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
08, bạn vẫn cần tạo import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39 của mình, nhưng bạn không phải triển khai tất cả các mẫu xử lý biểu mẫu tiêu chuẩn. Thay vào đó, bạn chỉ cần cung cấp triển khai chức năng sẽ được gọi sau khi nội dung gửi được xác định là hợp lệTrong phần này, chúng ta sẽ sử dụng các dạng xem chỉnh sửa chung để tạo các trang nhằm bổ sung chức năng tạo, chỉnh sửa và xóa các bản ghi
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
10 khỏi thư viện của chúng ta — cung cấp cách triển khai lại cơ bản một cách hiệu quả các phần của trang Quản trị [điều này có thể hữu ích nếu bạn Lượt xem
Mở tệp lượt xem [locallibrary/catalog/views. py] và nối thêm khối mã sau vào dưới cùng của nó
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
5Như bạn có thể thấy, để tạo, cập nhật hoặc xóa các chế độ xem, bạn cần lấy từ
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
11, import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
12 và import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
13 [tương ứng] rồi xác định mô hình liên quanĐối với các trường hợp "tạo" và "cập nhật", bạn cũng cần chỉ định các trường sẽ hiển thị trong biểu mẫu [sử dụng cú pháp tương tự như đối với
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
78]. Trong trường hợp này, chúng tôi trình bày cách liệt kê chúng riêng lẻ và cú pháp liệt kê các trường "tất cả". Bạn cũng có thể chỉ định các giá trị ban đầu cho từng trường bằng cách sử dụng từ điển các cặp tên_trường/giá trị [ở đây chúng tôi tùy ý đặt ngày mất cho mục đích minh họa — bạn có thể muốn xóa giá trị đó]. Theo mặc định, các chế độ xem này sẽ chuyển hướng thành công đến một trang hiển thị mục mô hình mới được tạo/chỉnh sửa, trong trường hợp của chúng tôi sẽ là chế độ xem chi tiết tác giả mà chúng tôi đã tạo trong hướng dẫn trước. Bạn có thể chỉ định một vị trí chuyển hướng thay thế bằng cách khai báo rõ ràng tham số import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
15 [như đã thực hiện đối với lớp import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
16]Lớp
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
16 không cần hiển thị bất kỳ trường nào, vì vậy không cần chỉ định các trường này. Tuy nhiên, bạn cần chỉ định import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
15, vì không có giá trị mặc định rõ ràng nào để Django sử dụng. Trong trường hợp này, chúng tôi sử dụng hàm import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
19 để chuyển hướng đến danh sách tác giả của chúng tôi sau khi một tác giả đã bị xóa — import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
19 là phiên bản được thực thi chậm của from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
20, được sử dụng ở đây vì chúng tôi đang cung cấp URL cho thuộc tính chế độ xem dựa trên lớpmẫu
Chế độ xem "tạo" và "cập nhật" sử dụng cùng một mẫu theo mặc định, mẫu này sẽ được đặt tên theo mô hình của bạn.
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
22 [bạn có thể thay đổi hậu tố thành một thứ khác ngoài _form bằng cách sử dụng trường import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
23 trong chế độ xem của bạn, ví dụ: import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
24]Tạo tệp mẫu
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
25 và sao chép văn bản bên dướifrom django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
6Điều này tương tự với các biểu mẫu trước đây của chúng tôi và hiển thị các trường bằng bảng. Cũng lưu ý cách chúng tôi khai báo
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
59 một lần nữa để đảm bảo rằng các biểu mẫu của chúng tôi chống lại các cuộc tấn công CSRFChế độ xem "xóa" sẽ tìm thấy một mẫu được đặt tên theo định dạng _
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
27 [một lần nữa, bạn có thể thay đổi hậu tố bằng cách sử dụng import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
23 trong chế độ xem của mình]. Tạo tệp mẫu import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
29 và sao chép văn bản bên dướifrom django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
7cấu hình URL
Mở tệp cấu hình URL của bạn [locallibrary/catalog/urls. py] và thêm cấu hình sau vào cuối tệp
from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
8Không có gì đặc biệt mới ở đây. Bạn có thể thấy rằng các dạng xem là các lớp và do đó phải được gọi thông qua
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
30 và bạn sẽ có thể nhận ra các mẫu URL trong từng trường hợp. Chúng ta phải sử dụng from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
04 làm tên cho giá trị khóa chính đã nắm bắt của mình, vì đây là tên tham số mà các lớp xem mong đợiTác giả tạo, cập nhật và xóa các trang hiện đã sẵn sàng để thử nghiệm [chúng tôi sẽ không bận tâm đến việc nối chúng vào thanh bên của trang web trong trường hợp này, mặc dù bạn có thể làm như vậy nếu muốn]
Ghi chú. Người dùng tinh ý sẽ nhận thấy rằng chúng tôi đã không làm bất cứ điều gì để ngăn người dùng trái phép truy cập trang. Chúng tôi coi đó như một bài tập cho bạn [gợi ý. bạn có thể sử dụng
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
32 và tạo quyền mới hoặc sử dụng lại quyền from django import forms
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
48 của chúng tôi]Kiểm tra trang
Đầu tiên, đăng nhập vào trang web bằng tài khoản có bất kỳ quyền nào bạn quyết định là cần thiết để truy cập các trang chỉnh sửa của tác giả
Sau đó điều hướng đến trang tạo tác giả,
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
34, trông giống như ảnh chụp màn hình bên dướiNhập giá trị cho các trường rồi nhấn Gửi để lưu bản ghi tác giả. Bây giờ, bạn sẽ được đưa đến chế độ xem chi tiết cho tác giả mới của mình, với một URL giống như
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
35Bạn có thể kiểm tra các bản ghi chỉnh sửa bằng cách thêm /update/ vào cuối URL xem chi tiết [e. g.
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
36] — chúng tôi không hiển thị ảnh chụp màn hình vì nó trông giống như trang "tạo"Cuối cùng, chúng tôi có thể xóa trang bằng cách thêm xóa vào cuối URL xem chi tiết của tác giả [e. g.
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
37]. Django sẽ hiển thị trang xóa được hiển thị bên dưới. Nhấn "Có, xóa. " để xóa bản ghi và được đưa vào danh sách tất cả các tác giảthử thách bản thân
Tạo một số biểu mẫu để tạo, chỉnh sửa và xóa bản ghi
import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
38. Bạn có thể sử dụng chính xác cấu trúc tương tự như đối với import datetime
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class RenewBookForm[forms.Form]:
renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
def clean_renewal_date[self]:
data = self.cleaned_data['renewal_date']
# Check if a date is not in the past.
if data datetime.date.today[] + datetime.timedelta[weeks=4]:
raise ValidationError[_['Invalid date - renewal more than 4 weeks ahead']]
# Remember to always return the cleaned data.
return data
39. Nếu book_form của bạn. mẫu html chỉ là một phiên bản đã được đổi tên của author_form. html, thì trang "tạo sách" mới sẽ giống như ảnh chụp màn hình bên dướiBản tóm tắt
Tạo và xử lý các biểu mẫu có thể là một quá trình phức tạp. Django làm cho nó dễ dàng hơn nhiều bằng cách cung cấp các cơ chế có lập trình để khai báo, kết xuất và xác thực các biểu mẫu. Hơn nữa, Django cung cấp các dạng xem chỉnh sửa biểu mẫu chung có thể thực hiện hầu hết mọi công việc để xác định các trang có thể tạo, chỉnh sửa và xóa các bản ghi được liên kết với một phiên bản mô hình duy nhất
Có thể làm được nhiều điều hơn nữa với biểu mẫu [hãy xem danh sách Xem thêm của chúng tôi bên dưới], nhưng bây giờ bạn đã hiểu cách thêm biểu mẫu cơ bản và mã xử lý biểu mẫu vào trang web của riêng mình