django源码分析-form表单模块分析


django form模块实现form表单功能,为用户提交数据提供了一个接口。该模块下面的内容如下:

  • jinja2 : 使用jinja2模板引擎实现的django form表单,里面是各种widgets的html页面模板,例如:inputCheckBoxdateemailfile等等。
  • templates : 这个是django默认的模板引擎实现form表单。里面也是各种widgets的html页面模板,例如:inputCheckBoxdateemailfile等等。
  • init.py : 模块初始文件,主要实现导入功能。
"""
Django validation and HTML form handling.
"""

from django.core.exceptions import ValidationError  # NOQA
from django.forms.boundfield import *  # NOQA
from django.forms.fields import *  # NOQA
from django.forms.forms import *  # NOQA
from django.forms.formsets import *  # NOQA
from django.forms.models import *  # NOQA
from django.forms.widgets import *  # NOQA
  • boundfield.py : django form 表单字段,对应多值表单组件,例如:radio、CheckBox等。
  • fields.py : django 表单字段,各种字段类型。
__all__ = (
    'Field', 'CharField', 'IntegerField',
    'DateField', 'TimeField', 'DateTimeField', 'DurationField',
    'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField',
    'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
    'ComboField', 'MultiValueField', 'FloatField', 'DecimalField',
    'SplitDateTimeField', 'GenericIPAddressField', 'FilePathField',
    'SlugField', 'TypedChoiceField', 'TypedMultipleChoiceField', 'UUIDField',
)
  • forms.py : django 表单模块,我们自定义的表单类,就继承它。
__all__ = ('BaseForm', 'Form')
  • formsets.py : 管理django表单集。
  • models.py :django ModelForm 实现模块。
__all__ = (
    'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model',
    'ModelChoiceField', 'ModelMultipleChoiceField', 'ALL_FIELDS',
    'BaseModelFormSet', 'modelformset_factory', 'BaseInlineFormSet',
    'inlineformset_factory', 'modelform_factory',
)
  • renderers.py : django 表单模板渲染模块,支持django默认模板和jinja2模板。
class DjangoTemplates(EngineMixin, BaseRenderer):
    """
    Load Django templates from the built-in widget templates in
    django/forms/templates and from apps' 'templates' directory.
    """
    backend = DjangoTemplates


class Jinja2(EngineMixin, BaseRenderer):
    """
    Load Jinja2 templates from the built-in widget templates in
    django/forms/jinja2 and from apps' 'jinja2' directory.
    """
    backend = Jinja2
  • utils.py : django 表单模块使用到的工具类。
  • widgets.py : django 表单组件模块实现。
__all__ = (
    'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'NumberInput',
    'EmailInput', 'URLInput', 'PasswordInput', 'HiddenInput',
    'MultipleHiddenInput', 'FileInput', 'ClearableFileInput', 'Textarea',
    'DateInput', 'DateTimeInput', 'TimeInput', 'CheckboxInput', 'Select',
    'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
    'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget',
    'SplitHiddenDateTimeWidget', 'SelectDateWidget',
)

更多Django教程

学习更多Django教程