Django------相关知识(三)
来源:互联网 发布:php时间戳转换月份 编辑:程序博客网 时间:2024/06/04 18:50
1、The Forms API
原文:https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.clean
clean_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 adminfrom .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 adminfrom .models import Questionadmin.site.register(Question);
目前的表单只有两个字段可能看不出什么,但是对于一个字段很多的表单,设计一个直观合理的排序方式非常重要。并且在字段数据很多时,还可以将表单分割成多个字段的集合:
代码:
from django.contrib import adminfrom .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);结果:
阅读全文
0 0
- Django------相关知识(三)
- Django——相关知识(二)
- Django——相关知识(一)
- MFC相关知识(三)
- 生产排程相关知识(三)
- 4G网络相关知识(三)
- IO相关知识复习三
- 多进程编程的相关知识总结(三)
- 第7天:Servlet相关知识(三)
- 纹理分割(三)纹理分割相关知识
- Django边学边做(三)
- Django(三)模板
- MapXtreme 2005 相关代码知识(三)
- 三、Android UiAutomator 相关JAVA知识
- iOS 地图的相关知识《三》
- MapXtreme 2005 学习心得 相关代码知识(三)
- Django学习笔记(三)--Django超链接
- 直播相关知识之三 优化及相关资料收集
- Java 从入门到入土(2)
- UVa 1594 解题报告
- C\C++和Lua是如何进行通信的?
- 2017年7月6日(新手记错)
- Android Studio Service AIDL 详解
- Django------相关知识(三)
- [leetcode]629. K Inverse Pairs Array
- Linux环境下redis安装、配置、启动/停止
- 教程 | 从特征分解到协方差矩阵:详细剖析和实现PCA算法
- python_列表生成式
- jquery各种选择器
- 如果浏览器报JavaScript出现错误导致代码程序中断,可以这样解决!
- 通过live555实现H264 RTSP直播
- Java中this的问题