在django
中form
表单主要有两个作用:
- 帮助我们生成表单控件,如
input
、select
等。 - 对表单信息进行验证并转化为
python
格式的数据
其中第一项与django
的模版高耦合,必须配合模版
使用,但是现在项目开发多半是前后端分离,并不太需要使用模版。而form
表单的第二个功能是低耦合的,完全可以单独使用。
一、使用form
类进行数据验证及转化
当我们接收前端发来的信息,一般需要做两件事情。
- 将
json
格式的字符串信息转化为pytnon
格式
- 将
- 验证数据是否合法
只有保证这两步不出错,才能进行下一步工作。
1. 使用form
表单类进行数据验证,以及转化数据格式
from django import forms
# 定义`Form`类可以转化的字段
class MyForm(forms.Form):
# 这里的字段名称与传入的`data`的key必须相同
name = forms.CharField()
age = forms.IntegerField()
created_date = forms.DateField()
def get_python_data(data):
# data 是字典格式
form = MyForm(data)
if form.is_valid():
return form.cleaned_data
>>>from my_app.views import get_python_data
>>>data = {'name': 'eeert','age': '18','created_date': '2002-8-8'}
>>>python_data = get_python_data(data)
>>>python_data
{'name': 'eeert', 'age': 18, 'created_date': datetime.date(2002, 8, 8)}
可以看出,我们定义的 CharField
被转化成str
,IntegerField
转化为int
,
DateField
转化为datetime.date
注意点:这里必须调用is_valid()
方法才会执行转化,一旦通过调用 is_valid()
验证成功( is_valid()
返回 True
),已验证的数据将被放到 form.cleaned_data
字典中。这里的数据已经很好的为你转化为Python
类型。
2. form
类通用的数据验证
-
required
字段是否必须,默认为True
例如我们在MyForm
类中定义了三个字段,则data
必须包含这三个字段信息
设置required
的字段可以不传入,但是返回值中依然包含该字段的信息。
# 传入 {'name': 'eeert', 'created_date': '2002-8-8'}
{'name': 'eeert', 'age': None, 'created_date': datetime.date(2002, 8, 8)}
2. 常用字段的验证规则 / 参数
CharField
-
max_length=None
最大长度 -
min_length=None
最小长度 -
strip=True
是否移除用户输入空白[这里默认移除字符串两侧空白
]
2.IntegerField
-
max_value
最大值 -
min_value
最小值
3.FloatField
-
max_value
最大值 -
min_value
最小值
- 时间类型:
DateTimeField
,TimeField
,DateField
-
input_formats
:[]
指定时间日期的输入格式,可以有多个。strptime
格式。
DateTimeField
,TimeField
,DateField
的默认输入格式分别为
'DATE_INPUT_FORMATS': ['%Y-%m-%d'],
'TIME_INPUT_FORMATS': ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'],
'DATETIME_INPUT_FORMATS': [
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M',
'%Y-%m-%d'
]
-
DurationField
符合时间段
格式
6 . RegexField
-
regex
传入一个正则表达式,验证字符串是否符合正则表达式
-
EmailField
字符串需要符合邮箱格式 -
URLField
字符串符合url
地址