form/modelform

form表单的作用:

      1.提供input可以提交数据

      2.对提交的数据进行校验

      3.提供错误提示

使用form组件实现注册功能:

      1.在views.py文件中定义类:

          from django import forms

          class X_x(forms.Form):

              name=forms.CharField(label="用户名")

              pwd=forms.CharField(label="密码")

      2.使用

         在视图文件views.py中:

              def reg(request):

                  form_obj=X_x()  #实例化form对象

                  if request.method=="POST":

                      form_obj=X_x(request.POST)  #将post提交的数据直接传过去.

                      if form_obj.is_valid():  #调用form_obj的'校验数据'方法

                          return HttpResponse("注册成功")  #也可以返回一个重定向等...

                   return render(requset,"reg.html",{"form_obj":form_obj})

         在模板(html文件)中:

               在form标签加上novalidate  前端不进行校验

               {{ form_obj.as_p}}  生成所有的p标签

               {{form_obj.errors}}  所有字段的错误

               {{form_obj.name}}  该字段的input框

               {{form_obj.name.label}}  该字段的label(中文提示)

               {{form_obj.name.id_for_label}}  该字段的id

               {{form_obj.name.errors}}  该字段的所有的错误信息

               {{form_obj.name.errors.0}}  该字段的第一个错误信息

常用字段:
      CharField  input    /forms.CharField

      ChoiceField  select框  /forms.fields.ChoiceField

      MultipleChoiceField  多选框  /forms.fields.MultipleChoceField

Form所有内置字段:

      Field

          required=True  是否为空

          widget=None  HTML插件

          label=None  用于生产Label标签或显示内容

          initial=None  初始值/设置默认值

          help_text=' '  帮助信息(在标签旁边显示)

          error_messages=None  错误信息  {'required':'不能为空','invalid':'格式错误'}

          validators=[]  自定义验证规则

          localize=False  是否支持本地化

          disabled=Flse  是否可以编辑

          label_suffix=None  Lbel内容后缀

      

CharField(Field)
    max_length=None,             最大长度
    min_length=None,             最小长度
    strip=True                   是否移除用户输入空白
 
IntegerField(Field)
    max_value=None,              最大值
    min_value=None,              最小值
 
FloatField(IntegerField)
    ...
 
DecimalField(IntegerField)
    max_value=None,              最大值
    min_value=None,              最小值
    max_digits=None,             总长度
    decimal_places=None,         小数位长度
 
BaseTemporalField(Field)
    input_formats=None          时间格式化   
 
DateField(BaseTemporalField)    格式:2015-09-01
TimeField(BaseTemporalField)    格式:11:12
DateTimeField(BaseTemporalField)格式:2015-09-01 11:12
 
DurationField(Field)            时间间隔:%d %H:%M:%S.%f
    ...
 
RegexField(CharField)
    regex,                      自定制正则表达式
    max_length=None,            最大长度
    min_length=None,            最小长度
    error_message=None,         忽略,错误信息使用 error_messages={'invalid': '...'}
 
EmailField(CharField)      
    ...
 
FileField(Field)
    allow_empty_file=False     是否允许空文件
 
ImageField(FileField)      
    ...
    注:需要PIL模块,pip3 install Pillow
    以上两个字典使用时,需要注意两点:
        - form表单中 enctype="multipart/form-data"
        - view函数中 obj = MyForm(request.POST, request.FILES)
 
URLField(Field)
    ...
 
 
BooleanField(Field)  
    ...
 
NullBooleanField(BooleanField)
    ...
 
ChoiceField(Field)
    ...
    choices=(),                选项,如:choices = ((0,'上海'),(1,'北京'),)
    required=True,             是否必填
    widget=None,               插件,默认select插件
    label=None,                Label内容
    initial=None,              初始值
    help_text='',              帮助提示
 
 
ModelChoiceField(ChoiceField)
    ...                        django.forms.models.ModelChoiceField
    queryset,                  # 查询数据库中的数据
    empty_label="---------",   # 默认空显示内容
    to_field_name=None,        # HTML中value的值对应的字段
    limit_choices_to=None      # ModelForm中对queryset二次筛选
     
ModelMultipleChoiceField(ModelChoiceField)
    ...                        django.forms.models.ModelMultipleChoiceField
 
 
     
TypedChoiceField(ChoiceField)
    coerce = lambda val: val   对选中的值进行一次转换
    empty_value= ''            空值的默认值
 
MultipleChoiceField(ChoiceField)
    ...
 
TypedMultipleChoiceField(MultipleChoiceField)
    coerce = lambda val: val   对选中的每一个值进行一次转换
    empty_value= ''            空值的默认值
 
ComboField(Field)
    fields=()                  使用多个验证,如下:即验证最大长度20,又验证邮箱格式
                               fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
 
MultiValueField(Field)
    PS: 抽象类,子类中可以实现聚合多个字典去匹配一个值,要配合MultiWidget使用
 
SplitDateTimeField(MultiValueField)
    input_date_formats=None,   格式列表:['%Y--%m--%d', '%m%d/%Y', '%m/%d/%y']
    input_time_formats=None    格式列表:['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
 
FilePathField(ChoiceField)     文件选项,目录下文件显示在页面中
    path,                      文件夹路径
    match=None,                正则匹配
    recursive=False,           递归下面的文件夹
    allow_files=True,          允许文件
    allow_folders=False,       允许文件夹
    required=True,
    widget=None,
    label=None,
    initial=None,
    help_text=''
 
GenericIPAddressField
    protocol='both',           both,ipv4,ipv6支持的IP格式
    unpack_ipv4=False          解析ipv4地址,如果是::ffff:192.0.2.1时候,可解析为192.0.2.1, PS:protocol必须为both才能启用
 
SlugField(CharField)           数字,字母,下划线,减号(连字符)
    ...
 
UUIDField(CharField)           uuid类型

        

原文地址:https://www.cnblogs.com/leo-tail-x/p/10131464.html