创建Form实例

f = ContactForm()  # 未绑定的表单实例

如果需要将数据绑定到表单,可以将数据以字典的形式传递给Form类的构造函数。

data = {'subject': 'hello',
        'message': 'Hi there',
        'sender': 'foo@example.com',
        'cc_myself': True}

f = ContactForm(data)

is_bound

用来区分绑定的表单和未绑定的表单。传递一个空字典将创建一个带有空数据的绑定的表单。

f = ContactForm()
f.is_bound  # False

f = ContactForm({"subject": "hello"})
f.is_bound  # True

f = ContactForm({})
f.is_bound  # True

clean()

如果要自定义验证功能,那么需要重新实现这个clean方法。

is_valid()

对绑定表单的数据进行校验功能,将返回一个布尔值以表示返回的数据是否合法。

errors

存储表单的错误信息字典。键为字段的名字,值为错误信息的Unicode字符串自称的列表。

errors.as_data()

返回一个字段,将字段映射到原始的ValidationError实例。

f.errors.as_data()
# {
    'sender': [ValidationError(['Enter a valid email address.'])],
    'subject': [ValidationError(['This field is required.'])]
  }

errors.as_json(escape_html=False)

返回JSON序列化后的错误信息字典。

f.errors.as_json()
# {
    {"sender": [{"message": "Enter a valid email address.", "code": "invalid"}],
    "subject": [{"message": "This field is required.", "code": "required"}]
}

add_error(field, error)

向表单特定字段添加错误信息。
field参数为字段的名字。如果值为None,error将作为Form.non_field_errors()的要一个非字段错误。

has_error(field, code=None)

判断某个字段是否具有指定code错误。当code为None,如果字段有任何错误它都将返回True。

non_field_errors()

返回Form.errors中不是与特定字段相关联的错误。

has_changed()

当需要检查表单的数据是否从初始数据发生改变时,可以使用has_changed()方法。

data = {
    'subject': 'hello',
    'message': 'Hi there',
    'sender': 'foo@example.com',
'    cc_myself': True
}
f = ContactForm(data, initial=data)
f.has_changed()  # False

提交表单后,可以重新构建表单并提供初始化值,进行比较:

f = ContactForm(request.POST, initial=data)
f.has_changed()
# 如果request.POST与initial中的数据有却别,将返回True,否则返回False。

changed_data

返回有变化的字段的列表。

cleaned_data

Form类中的每个字段不仅负责验证数据,还负责将它们转换为正确的格式。一旦创建了一个Form实例并通过验证后,就可以通过它的cleaned_data属性访问干净的数据。如果数据没有通过验证,cleaned_data字典将会将其个过滤掉。
cleaned_data字段始终只包含Form中定义的字段,即使你在构建Form时传递了额外的数据。但是cleaned_data也将只包含表单的字段。

error_css_class 和 requeired_css_calss

为必填字段和错误信息字段添加css属性名。

from django import forms


class ContactForm(forms.Form):
    error_css_class = 'error'
    required_css_class = 'required'

将上传的文件绑定到表单

处理带有FileField和ImageField字段的表单比普通的表单要稍微复杂一点。
为了上传文件,需要确保<form>元素定义enctype"multipart/form-data"

<form enctype="multipart/form-data" method="post" action="/foo/">

其次,当使用表单时,需要绑定文件数据。文件数据的处理与普通的表单数据是分开的,所以如果表单包含FileField和ImageField,绑定表单时,需要制定第二个参数,可参考下面的示例:

from django.core.files.uploadedfile import SimpleUploadedFile
data = {
    'subject': 'hello',
    'message': 'Hi there',
    'sender': 'foo@example.com',
    'cc_myself': True
}
file_data = {'mugshot': SimpleUploadedFile('face.jpg', <file data>)}
f = ContactFormWithMugshot(data, file_data)

实际上,一般使用request.FILES作为文件数据的源:

f = ContactFormWithMugshot(request.POST, request.FILES)
0条评论

相关推荐

django教程

r

Django 2019-05-20 10:53:53

Celery

celery学习资料

Django 2019-05-25 18:41:55

Django-rest-framework教程

django-rest-framework教程。

Django 2019-07-18 16:33:26

django实用资料

django项目从0到1自己总结的实用的资料,大部分常用的功能这里都有

Django 2019-05-08 18:21:34