Django------相关知识(三)
2017-07-06 14:15
375 查看
1、The Forms API
原文:https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.cleanclean_data:表单类中的每个字段不仅负责验证数据,还负责“清理”数据——将其规范为一致格式。这是一个很好的特性,因为它允许一个特定字段的数据以多种
方式输入,总是产生一致的输出。例如,DateField将输入规范化为Python datetime.date对象。 无论您是否以“1994-07-15”格式传递一个字符串,datetime.date
对象或许多其他格式,DateField将始终将其标准化为datetime.date对象,只要它有效。一旦你创建了具有一组数据并对其进行验证了的Form实例后,您可以通
过其clean_data属性访问(clean)干净的数据:
>>> 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)始终将输入清理为字符串。 我们将在本文档的后面介绍编码含义。
如果您的数据未验证,则clean_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'}clean_data将始终只包含Form中定义的字段的键,即使您在定义表单时传递额外的数据。 在这个例子中,我们将一堆额外的字段传递给ContactForm构造函
数,但是clean_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'}
当表单有效时,clean_data将包含所有字段的键和值,即使数据中没有包含某些可选字段的值。 在这个例子中,数据字典不包含nick_name字段的值,但是
clean_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的clean_data值设置为空字符串,因为nick_name是CharField,CharField将空值视为空字符串。 每个字段类型都知道它
的“空白”值是什么 - 例如对于DateField,它是None而不是空字符串。 有关这种情况下每个字段行为的完整详细信息,请参阅下面“内置字段类”部分中每个字
段的“空值”笔记。
您可以编写代码来对特定表单字段(基于其名称)或整体的形式(考虑各种字段的组合)执行验证。 有关这方面的更多信息,请参见表单和字段验证。
2、Django 1.10中文文档-第一个应用Part7-自定义管理站点
代码:
from django.contrib import admin from .models import Question # Register your models here. class QuestionAdmin(admin.ModelAdmin): fields=['pub_date','question_text']#代表admin管理界面,表单的字段显示顺序,布局 admin.site.register(Question,QuestionAdmin);
代码为:
from django.contrib import admin from .models import Question admin.site.register(Question);
目前的表单只有两个字段可能看不出什么,但是对于一个字段很多的表单,设计一个直观合理的排序方式非常重要。并且在字段数据很多时,还可以将表单分割成多个字段的集合:
代码:
from django.contrib import admin from .models import Question # Register your models here. class QuestionAdmin(admin.ModelAdmin): #fields=['pub_date','question_text'] fieldsets=[ (None,{'fields':['question_text']}), ('Date information',{'fields':['pub_date']}), ] admin.site.register(Question,QuestionAdmin);结果:
相关文章推荐
- Django 相关知识
- 详解Python的Django框架中的模版相关知识
- Django——相关知识(二)
- Django Admin的相关知识
- 详解Python的Django框架中的模版相关知识
- Django——相关知识(一)
- JAVA相关基础知识(5)
- jQuery Ajax 相关知识六
- python中import的相关知识总结
- python编码及文件编ASCII,Unicode和UTF-8相关知识
- css基础浮动相关知识
- SNMP口令的利用以及一些相关知识
- 关于GTK的相关知识
- C++相关基础知识(转贴)
- 1.C++相关知识1
- JCF 相关知识
- Socket相关知识
- VMware虚拟网络相关知识
- orace 表以及相关知识1
- LeetCode数据库题解&&sql相关知识总结