您的位置:首页 > 其它

使用 forms 模块处理表单

2019-05-03 00:00 120 查看

使用 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={
                                
                            })
                        }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: