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模块的高级处理中以及举例子了。

原文地址:https://www.cnblogs.com/zengsf/p/9986445.html