Lấy dữ liệu từ html django

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ất

Tổ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 web

Mặ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ết

Theo 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]

  • 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. 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ạ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
    
    33. Phương thức HTTP được sử dụng để gửi dữ liệu. đăng hoặc nhận
    • Phương phá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]."]
      
      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 web
    • Chỉ nên sử dụng phương phá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
      
      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ẻ URL

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à

  1. 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]
  2. 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
  3. 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. ]
  4. 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 đề
  5. 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.]
  6. 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ách

Ghi 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 Django

Gia 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ại

Ví 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ôi

Hì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ệu

Dữ 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ạ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]."]

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ày

Có 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

  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 
      Enter name: 
      
      
    
    
    30
  • 
      Enter name: 
      
      
    
    
    31
  • 
      Enter name: 
      
      
    
    
    32
  • 
      Enter name: 
      
      
    
    
    33
  • 
      Enter name: 
      
      
    
    
    34
  • 
      Enter name: 
      
      
    
    
    35
  • 
      Enter name: 
      
      
    
    
    36
  • 
      Enter name: 
      
      
    
    
    37
  • 
      Enter name: 
      
      
    
    
    38
  • 
      Enter name: 
      
      
    
    
    39
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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

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ý]

  • 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. Nế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
    
    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ẽ đặ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
    
    31 để cho phép các giá trị trống trong biểu 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
    
    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á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
    
    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ụ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 [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ườ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
    
    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ầ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
    
    38. Danh sách các chức năng sẽ được gọi trên trường khi nó được xác 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
    
    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
    
    32

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ưới

Cậ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ày

Ghi 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
3

The 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ụng

Lượ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à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
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

  • 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. 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ạ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]."]
    
    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ì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]."]
    
    22. Một thư viện Python để thao tác ngày và giờ

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ạ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
3

Sau 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ạn

Tuy 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ẫu

Sau đó, 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: 
  
  

3

Nế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ỗi

Nế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ết

Cả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 Python

Bướ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ản

Do đó, 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
3

Bả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
3

Hầ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 đầu

Mã 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 Django

Ghi 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ại

Tấ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ướ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
3

Ghi 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]."]
63

Nế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]."]
0

Cá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

  • from django import forms
    
    class RenewBookForm[forms.Form]:
        renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
    
    69 Cả cánh đồ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]."]
    
    70. Danh sách 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]."]
    
    71. Id của nhã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]."]
    
    72. Văn bản trợ giúp trường

Để 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]."]
1

Ghi 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ào

Tuy 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ường

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 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ẫ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]."]
2

Ghi 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]."]
38

from django import forms

class RenewBookForm[forms.Form]:
    renewal_date = forms.DateField[help_text="Enter a date between now and 4 weeks [default 3]."]
4

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
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
06

Chế độ 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ình

Ghi 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]."]
5

Như 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ớp

mẫ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ướ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]."]
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 CSRF

Chế độ 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ướ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]."]
7

cấ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]."]
8

Khô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 đợi

Tá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ưới

Nhậ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
35

Bạ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ưới

Bả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

Làm cách nào để gửi dữ liệu từ HTML đến cơ sở dữ liệu ở Django?

Các bước để lưu biểu mẫu HTML và chèn dữ liệu vào cơ sở dữ liệu trong Django .
Tạo một lớp mô hình
Hiểu các loại trường mô hình khác nhau
Thực hiện di chuyển và thiết lập cơ sở dữ liệu
Tạo biểu mẫu để lấy đầu vào của người dùng
Đặt URL và chạy ứng dụng Django

Chúng tôi có thể kết nối Django với HTML không?

Trong trang Giới thiệu Django, chúng tôi đã biết rằng kết quả phải ở dạng HTML và kết quả phải được tạo trong mẫu , vì vậy, hãy . Tạo thư mục mẫu bên trong thư mục thành viên và tạo tệp HTML có tên myfirst. html.

{% bao gồm %} trong Django là gì?

Thẻ bao gồm cho phép bạn bao gồm một mẫu bên trong mẫu hiện tại . Điều này hữu ích khi bạn có một khối nội dung giống nhau cho nhiều trang.

{{ biểu mẫu AS_P }} là gì?

{{ biểu mẫu. as_p }} – Hiển thị Biểu mẫu Django dưới dạng đoạn văn . {{ hình thức. as_ul }} – Kết xuất Biểu mẫu Django dưới dạng danh sách.

Chủ Đề