• Flask与Django的表单类(待续)


    两者都是定义个form.py脚本文件,然后在views.py中导入到对应的视图函数中

    Flask的表单类

    from flask_wtf import FlaskForm
    Flask表单类写在自定义的form.py文件中,然后再views.py文件中导入该form.py文件,将该文件中的各种表单类加入到对应的视图函数中,然后render_template(xx.html,form=form)渲染html页面时候当作form关键字传入

    class LoginForm1(FlaskForm): # 登录表单
        name = StringField('name',validators=[DataRequired()])
        # StringField第二个参数可以不加关键字传入
        password = StringField('password',[DataRequired()])
    

    使用场景

    Django的表单类

    from django import forms

    class VocationForm(forms.Form): # form.Form的字段和models中的字段类似
        job = forms.CharField(max_length=20, label='职位') 
        # 设置字段参数widget、error_messages
        # 参数widwget必须是个forms.widgets对象,而widwget的对象必须和表单字段类型相互对应,对应该则分为4大类,该定义的函数中可以传入css样式的class,id等属性
        title = forms.CharField(max_length=20, label='职称', #下面这句话啥意思
                                # 以修饰的css样式为先,但它这里还能更改html表单的类型,TextInput表述文本框,若是charfield显示下拉框,优先使用文本框
                                widget=forms.widgets.TextInput(attrs={'class': 'c1'}), # 设置表单的css样式,TextInput表示文本输入框,要和charfield输入样式相同
                                error_messages={'required': '职称不能为空'},) # 设置验证失败后的参数信息,字典的键为表单的参数名称,字典的值为错误信息
        # 设置字段参数validators;validators参数一定要列表形式么;该参数是自定义验证函数
        payment = forms.IntegerField(label='薪资',validators=[payment_validate]) # IntegerField字段还可以添加额外验证函数
        # 设置下拉框的值
        # 查询模型PersonInfo的数据
        value = PersonInfo.objects.values('name')
        # 将数据以为列表格式表示,列表元素为元组格式
        choices = [(i+1, v['name']) for i, v in enumerate(value)] # enumerate()生成(索引,值)的列表
        # 表单字段设为ChoiceField类型,用生成下拉框
        person = forms.ChoiceField(choices=choices, label='姓名')
    
        # 自定义表单字段title的数据清洗(修改该字段的返回值)
        # 最好函数名要与获取的表单字段名一样,方便阅读
        def clean_job(self): # 函数应该是自定义的,并不是,返回值的话会返回给该字段
            # 获取字段title的值
            # 类可以调用方法中的属性,是由于有self么
            # 提取的是表单字段的属性
            data = self.cleaned_data['job'] # cleaned_data是默认的属性
            return '初级' + data  # 通过views.py返回给终端
    

    上方的是普通表单类,需要注意字段类型与数据库模型进行转换
    下方的是模型表单

    class VocationForm(forms.ModelForm):
        # 添加模型外的表单字段;在模型已有的字段下再添加字段;添加的html位置在表单最下方
        LEVEL = (('L1', '初级'),
                 ('L2', '中级'),
                 ('L3', '高级'),)
        level = forms.ChoiceField(choices=LEVEL, label='级别') # 看来choices的前缀L1,L2之类的就是索引
        # 模型与表单设置
        class Meta:
            # 绑定模型
            model = Vocation
            # 以下属性都是函数modelform_factory的属性
            # fields属性用于设置转换字段,'__all__'是将全部模型字段转换成表单字段
            # fields = '__all__'
            # fields = ['job', 'title', 'payment', 'person']
            # exclude用于禁止模型字段转换表单字段
            exclude = []
            # labels设置HTML元素控件的label标签
            labels = {
                'job': '职位',
                'title': '职称',
                'payment': '薪资',
                'person': '姓名'
            }
            # 定义widgets,设置表单字段的CSS样式
            widgets = {
                'job': forms.widgets.TextInput(attrs={'class': 'c1'}),
            }
            # 重新定义字段类型
            # 一般情况下模型字段会自动转换成表单字段
            field_classes = {
                'job': forms.CharField
            }
            # 帮助提示信息
            help_texts = {
                'job': '请输入职位名称'
            }
            # 自定义错误信息
            error_messages = {
                # __all__设置全部错误信息
                '__all__': {'required': '请输入内容',
                            'invalid': '请检查输入内容'},
                # 设置某个字段的错误信息
                'title': {'required': '请输入职称',
                          'invalid': '请检查职称是否正确'}
            }
        # 自定义表单字段payment的数据清洗
        def clean_payment(self):
            # 获取字段payment的值
            data = self.cleaned_data['payment'] + 1
            return data
    
    
  • 相关阅读:
    学习:Intents和Intent Filters(理论部分)
    天书夜读:从汇编语言到Windows内核编程笔记(1)
    学习:Intents和Intent Filters(实例部分)
    寒江独钓(1):内核数据类型和函数
    寒江独钓(2):串口的过滤
    学习:了解WDK目录
    Nginx 414 RequestURI Too Large 海口
    Ansible 批量修改密码 海口
    记一次node进程无法kill 问题 海口
    Vue学习心得新手如何学习Vue(转载)
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/16199673.html
Copyright © 2020-2023  润新知