使用 forms 模块处理表单

使用 forms 模块处理表单
    1、forms 模块的作用
        通过 forms 模块,允许将表单与class相结合,可以自动的生成表单控件
    2、使用 forms 模块
        1、创建 forms.py 文件
        2、导入 forms
            from django import forms
        3、创建 class,一个class对应一个表单
            必须继承自 forms.Form类
        4、在class中创建属性
            一个属性对应着一个表单控件
            (参考文档)
    3、在模板中解析 form 对象
        1、注意
            1、需要自定义<form>
            2、需要自定义 提交按钮
        2、解析方式
            1、手动解析
                在视图中创建 xxForm() 并发送到模板中
                ex:
                    form = RemarkForm()
                    return render(request,'xx.html',locals())
                手动解析:
                    模板中:
                    {% for field in form %}
                        {{field.label}} : 控件前的文本
                        {{field}} : 表示控件
                    {% endfor %}
                
            2、自动解析
                1、{{form.as_p}}
                    将表单中的每个属性都解析成一个p标记,再显示标签以及控件
                2、{{form.as_ul}}
                    将表单中的每个属性都解析成一个li标记,再显示标签以及控件
                    注意:需要自定义<ul></ul> 或 <ol></ol>
                3、{{form.as_table}}
                    将表单中的每个属性都解析成一个tr标记,再显示标签以及控件
                    注意:需要自定义<table>
    4、使用 forms.Form 获取表单数据
        1、通过 forms.Form 子类的构造函数,接受post数据
            form = xxxForm(request.POST)
        2、需要让 form 通过验证后再取值
            form.is_valid()
            返回true:提交的数据已经通过所有验证,允许获取表单数据
            返回false:提交的数据有暂时未通过验证的
        3、获取表单提交的数据
            通过 form.cleaned_data(字典)接收提交的数据
            cd = form.cleaned_data
            print(cd['subject']) #获取提交数据中subject对应的数据

        练习:
            1、在 forms.py 中追加一个 RegisterForm 类
            2、增加以下属性,并生成到 06_register.html显示成表单控件
                1、uname :文本框
                2、upwd :密码框
                3、uemail :邮件框
                4、uage :文本框
            3、在 06_register.html中追加 form 和 submit
            4、点击提交按钮时,将数据插入到数据库中
                创建库 day6 ,创建Models - Users
    5、forms 的高级处理
        将 Models 和 Forms 结合到一起使用
        1、在 forms.py中,创建class,继承自 forms.ModelForm
        2、创建内部类 :Meta,关联Form 和 Models
            1、model : 指定要关联的Model类是谁
            2、fields :从models中取哪些字段要生成控件
                1、取值 "__all__",取出全部字段生成控件
                2、指定一个列表,声明允许生成控件的字段名
            3、labels : 指定每个属性关联的label,取值为字典
                labels = {
                    '属性名1':'label文本1',
                    '属性名2':'label文本2',
                }

 

 

内部小部件

1、小部件

        小部件(widget),表示生成到页面中的空间的类型以及其他属性

2、常用小部件

           1、TextInput : type='text'
            2、NumberInput : type='number'
            3、EmailInput : type='email'
            4、URLInput : type='url'
            5、PasswordInput : type='password'
            6、HiddenInput : type="hidden"
            7、CheckboxInput : type='checkbox'
            8、Textarea : <textarea></textarea>
            9、Select : <select></select>

 

3、小部件的使用
            1、继承自 forms.Form
                1、基本版
                    属性 = forms.CharField(
                        label='xxx',
                        widget=forms.小部件类型
                    )
                    ex:
                        upwd = forms.CharField(
                            label='用户密码',
                            widget=forms.PasswordInput
                        )
                2、高级版
                    属性=forms.CharField(         
                        label='标签',
                        widget=forms.小部件类型(
                            attrs={
                                '属性名1':'属性值1',
                                '属性名2':'属性值2',
                            }
                        )
                    )
            2、继承自 forms.ModelForm
                class WidgetForm(forms.ModelForm):
                    class Meta:
                        model = Users
                        fields = '__all__'
                        labels = {
                            '属性1':'标签1',
                            '属性2':'标签2',
                        }
                        widgets={
                            '属性1':forms.小部件类型(attrs={
                                
                            })
                        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值