美文网首页
django 使用 form 进行数据验证

django 使用 form 进行数据验证

作者: eeert2 | 来源:发表于2020-03-11 23:51 被阅读0次

djangoform表单主要有两个作用:

  • 帮助我们生成表单控件,如inputselect等。
  • 对表单信息进行验证并转化为python格式的数据

其中第一项与django的模版高耦合,必须配合模版使用,但是现在项目开发多半是前后端分离,并不太需要使用模版。而form表单的第二个功能是低耦合的,完全可以单独使用。

一、使用form类进行数据验证及转化

当我们接收前端发来的信息,一般需要做两件事情。

    1. json格式的字符串信息转化为pytnon格式
    1. 验证数据是否合法

只有保证这两步不出错,才能进行下一步工作。

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. 常用字段的验证规则 / 参数
  1. CharField
  • max_length=None 最大长度
  • min_length=None 最小长度
  • strip=True 是否移除用户输入空白[ 这里默认移除字符串两侧空白 ]

2.IntegerField

  • max_value 最大值
  • min_value 最小值

3.FloatField

  • max_value 最大值
  • min_value 最小值

  1. 时间类型: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'
]

  1. DurationField符合时间段格式

6 . RegexField

  • regex 传入一个正则表达式,验证字符串是否符合正则表达式
  1. EmailField 字符串需要符合邮箱格式
  2. URLField 字符串符合url地址

二、Form类的源码

相关文章

网友评论

      本文标题:django 使用 form 进行数据验证

      本文链接:https://www.haomeiwen.com/subject/kuifjhtx.html