本文介紹 django.forms.Form.cleaned_data
的用法。
聲明
Form.cleaned_data
類中的每個字段不僅負責驗證數據,還負責 “cleaning” it - 將其規範化為一致的格式。這是一個很好的函數,因為它允許以多種方式輸入特定字段的數據,始終產生一致的輸出。Form
例如,
將輸入規範化為 Python DateField
datetime.date
對象。無論您是否將格式為 '1994-07-15'
的字符串、datetime.date
對象或許多其他格式的字符串傳遞給它,隻要它有效,DateField
將始終將其規範化為 datetime.date
對象。
使用一組數據創建
實例並對其進行驗證後,您可以通過其 Form
cleaned_data
屬性訪問幹淨的數據:
>>> data = {'subject': 'hello',
... 'message': 'Hi there',
... 'sender': 'foo@example.com',
... 'cc_myself': True}
>>> f = ContactForm(data)
>>> f.is_valid()
True
>>> f.cleaned_data
{'cc_myself': True, 'message': 'Hi there', 'sender': 'foo@example.com', 'subject': 'hello'}
請注意,任何基於文本的字段——例如CharField
或EmailField
——總是將輸入清理為字符串。我們將在本文檔後麵介紹編碼含義。
如果您的數據確實 not
驗證,則 cleaned_data
字典僅包含有效字段:
>>> data = {'subject': '',
... 'message': 'Hi there',
... 'sender': 'invalid email address',
... 'cc_myself': True}
>>> f = ContactForm(data)
>>> f.is_valid()
False
>>> f.cleaned_data
{'cc_myself': True, 'message': 'Hi there'}
cleaned_data
將始終 only
包含在 Form
中定義的字段的鍵,即使您在定義 Form
時傳遞了額外的數據。在這個例子中,我們將一堆額外的字段傳遞給 ContactForm
構造函數,但 cleaned_data
隻包含表單的字段:
>>> data = {'subject': 'hello',
... 'message': 'Hi there',
... 'sender': 'foo@example.com',
... 'cc_myself': True,
... 'extra_field_1': 'foo',
... 'extra_field_2': 'bar',
... 'extra_field_3': 'baz'}
>>> f = ContactForm(data)
>>> f.is_valid()
True
>>> f.cleaned_data # Doesn't contain extra_field_1, etc.
{'cc_myself': True, 'message': 'Hi there', 'sender': 'foo@example.com', 'subject': 'hello'}
當 Form
有效時,cleaned_data
將包含 all
其字段的鍵和值,即使數據不包含某些可選字段的值。在此示例中,數據字典不包含 nick_name
字段的值,但 cleaned_data
包含它,但值為空:
>>> from django import forms
>>> class OptionalPersonForm(forms.Form):
... first_name = forms.CharField()
... last_name = forms.CharField()
... nick_name = forms.CharField(required=False)
>>> data = {'first_name': 'John', 'last_name': 'Lennon'}
>>> f = OptionalPersonForm(data)
>>> f.is_valid()
True
>>> f.cleaned_data
{'nick_name': '', 'first_name': 'John', 'last_name': 'Lennon'}
在上麵的示例中,nick_name
的 cleaned_data
值設置為空字符串,因為 nick_name
是 CharField
,並且 CharField
將空值視為空字符串。每個字段類型都知道它的 “blank” 值是什麽 - 例如,對於 DateField
,它是 None
而不是空字符串。有關在這種情況下每個字段行為的完整詳細信息,請參閱下麵“內置 Field
類”部分中每個字段的 “Empty value” 注釋。
您可以編寫代碼來對特定表單字段(基於它們的名稱)或整個表單(考慮各種字段的組合)執行驗證。有關這方麵的更多信息,請參見表單和字段驗證。
相關用法
- Python Django Form.default_renderer用法及代碼示例
- Python Django Form.as_p用法及代碼示例
- Python Django Form.as_table用法及代碼示例
- Python Django Form.is_multipart用法及代碼示例
- Python Django Form.fields用法及代碼示例
- Python Django Form.prefix用法及代碼示例
- Python Django Form.as_ul用法及代碼示例
- Python Django FormView用法及代碼示例
- Python Django ForeignKey.on_delete用法及代碼示例
- Python Django ForeignKey.related_name用法及代碼示例
- Python Django ForeignKey.related_query_name用法及代碼示例
- Python Django ForeignKey.limit_choices_to用法及代碼示例
- Python Django File.save用法及代碼示例
- Python Django Field.description用法及代碼示例
- Python Django Feature.get用法及代碼示例
- Python File next()用法及代碼示例
- Python File tell()用法及代碼示例
- Python Django Floor用法及代碼示例
- Python Django Field.type_name用法及代碼示例
- Python Django Feed.item_geometry用法及代碼示例
- Python Django Feed用法及代碼示例
- Python Django Field.help_text用法及代碼示例
- Python File seek()用法及代碼示例
- Python Django Feature.fid用法及代碼示例
- Python OpenCV Filter2D()用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.forms.Form.cleaned_data。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。