• forms


    1.forms模块的作用
      通过forms模块,允许将表单与class结合(表单与实体类结合),允许通过class生成表单
    2.使用forms模块
      1.在应用中创建 forms.py 文件
      2.导入forms模块
        from django import forms
      3.创建class,一个class对应生成一个表单
        class ClassName(forms.Form):
          pass
      4.创建属性
        一个属性对应到表单中生成一个控件

    class RemarkForm(forms.Form):
      #评论标题
      # forms.CharField() - 文本框
      # label : 控件前的文本标签
      subject = forms.CharField(label='标题')
      #电子邮箱
      # forms.EmailField() - Email框
      # label : 控件前的文本标签
      email = forms.EmailField(label='邮箱')

    3.在模板中解析 form 对象
      1.注意
        在模板中,需要:
          1.自定义 <form></form>
          2.自定义 提交按钮
      2.处理方法
        1.在 views 中创建 form 的对象并发送到模板上
          form = RemarkForm()
          return render(request,'xxx.html',locals())
        2.在模板中进行解析
          1.手动解析
           {% for field in form %}
            {{field}} :
              表示的就是form对象中的一个独立属性
              表示的也就是一个独立的控件
            {{field.label}}:
              表示的是控件中的label的值
           {% endfor %}
          2.自动解析
            1.{{form.as_p}}
              将form对象中的每个属性使用p标记包裹起来再显示
            2.{{form.as_ul}}
              将form对象中的每个属性使用li标记包裹起来,再显示
              注意:必须手动提供<ol> 或 <ul>
            3.{{form.as_table}}
              将form对象中的每个属性用tr标记包裹起来,再显示
              注意:必须手动提供<table>

    4.通过 forms.Form 获取表单数据 - POST
      1.通过 forms.Form 的构造函数来接收post数据
        form = xxxForm(request.POST)
      2.必须使form通过验证后再获取数据
        form.is_valid()
          返回True:提交的数据以及表单已通过所有的验证,允许取值
          返回False:未通过验证,则不能正常取值
      3.获取表单中的数据
        通过 form.cleaned_data 来获取提交的数据,返回的是一个字典。

        #使用forms的对象来接收提交的数据
        #1.将request.POST的数据提交给RemarkForm
        form = RemarkForm(request.POST)
        #2.让RemarkForm的对象通过验证
        if form.is_valid():
            #3.通过验证后再获取各个控件的值
            cd = form.cleaned_data
            print(cd['email'],cd['subject'])

    5.forms模块的高级处理
     将 Models 和 Forms 结合到一起使用
      1.在 forms.py 中创建 class ,继承自 forms.ModelForm
      2.创建内部类Meta,去关联 Model
        1.model : 指定要关联的实体类
        2.fields : 指定从Model中取哪些字段生成控件
          1.取值 "__all__",表示全部属性都要生成控件
          2.取值 列表,声明允许生成控件的属性名
        3.labels : 指定每个属性所关联的label,取值为字典
          labels = {
            '属性名':'label文本',
            '属性名':'label文本',
          } 

        4.widgets : 指定小部件  

          widgets = {
            "属性1":forms.小部件类型(
              attrs = {'属性':'值',}
              ),
            }

    class user(forms.ModelForm):
      class Meta:
        #指定关联的实体
        model = Author
        #指定要显示的字段
        fields = ['name','age','email']
        #指定字段对应的标签
        labels = {'name':'用户姓名','age':'用户年龄','email':'用户邮箱',}
        #指定字段对应的小部件
        widgets = {
          'age':forms.NumberInput(
            attrs = {'placeholder':'请输入年龄','class':'form-control',}
          ),
          'email':forms.EmailInput(
            attrs = {'placeholder':'请输入您的电子邮箱','class':'form-control',}
          )
        }

    6.小部件的使用-widget

      1.什么是小部件
        小部件,表示的就是生成到网页上的控件类型以及其他的html属性
      2.常用小部件类型
        1.TextInput : type='text'
        2.PasswordInput : type='password'
        3.NumberInput : type='number'
        4.EmailInput : type='email'
        5.URLInput : type='url'
        6.HiddenInput : type='hidden'
        7.CheckboxInput : type='checkbox'
        8.Textarea : <textarea></textarea>
        9.Select : <select></select>

      3.小部件的使用

        1.继承自 forms.Form 类
          指定控件类型的基础上还允许设置一些相关的HTML属性到控件上
          属性 = forms.CharField(
            label = '文本',
            widget = forms.小部件类型(
              attrs = {'html属性名':'属性值','html属性名':'属性值',}
              )
            )

        2.继承自forms.ModelForm类:

          5.forms模块的高级处理中以及举例子了。

  • 相关阅读:
    完全自主创建Wrapper Tomcat容器
    python新手菜鸟之基础篇
    使用python抓取数据之菜鸟爬虫1
    简单实现Python调用有道API接口(最新的)
    演示嵌套函数定义及使用装饰器
    纯手工搭建VS 2017(社区 免费版)离线安装包
    C#中的PropertyGrid绑定对象,通过改变某一值而动态设置部分属性的特性
    WinForm 画布的标尺和网格
    Open Source
    动态链接库-Win32 DLL的说明
  • 原文地址:https://www.cnblogs.com/zengsf/p/9986445.html
Copyright © 2020-2023  润新知