zoukankan      html  css  js  c++  java
  • 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类型

            

  • 相关阅读:
    leetcode 279. Perfect Squares
    leetcode 546. Remove Boxes
    leetcode 312. Burst Balloons
    leetcode 160. Intersection of Two Linked Lists
    leetcode 55. Jump Game
    剑指offer 滑动窗口的最大值
    剑指offer 剪绳子
    剑指offer 字符流中第一个不重复的字符
    leetcode 673. Number of Longest Increasing Subsequence
    leetcode 75. Sort Colors (荷兰三色旗问题)
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/10131464.html
Copyright © 2011-2022 走看看