• django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息


    
    *******************************    Forms组件   ***************************************************
    Forms组件在程序中做了哪些事?
    校验数据、渲染标签、展示信息
        Forms组件可以做的事情的详细步骤:
        1.用户请求数据的验证
        2.自动生成错误信息
        3.打包用户提交的正确信息
        4.如果其中有一个错误了,其他的正确,保留上次输入的内容,保证输入框中的数据不会清空
        5.自动创建input标签并可以设置样式
    
    forms组件:
                前戏需求:
                    1.写一个注册页面,获取用户输入的用户名和密码,
                    数据提交到后端之后,后端需要对用户名和密码做校验,
                    用户名里面不能含有 挺差的,其次密码不能小于3位,如果不符合,展示对应的错误信息。
    
            自己通过render的方式给前端页面渲染了对应的数据,实现了前戏需求,
            思路是:
                1.手动书写html代码获取用户输入
                2.将数据提交给后端做数据校验
                3.如果数据有错误,把错误信息返回到前端页面
    
            urls.py文件
    
            from app01 import views
            urlpatterns = [
                url(r'^admin/', admin.site.urls),
                url(r'^register/', views.register),
    
            ]
    
    
            views.py文件
    
            def register(request):
                message={'username':'','password':''}
                if request.method == 'POST':
                    #注意请求的方式上必须要大写才可以
                    username=request.POST.get('username')
                    password=request.POST.get('password')
                    if '挺差的' in username:
                        message['username']='不符合规范'
                    if len(password) < 3:
                        message['password'] = '太短了不够长,给你退回去了'
    
                return render(request,'register.html',locals())
    
    
    
            register.html文件
    
            <form action="" method="post">
                <p>
                    username:
                    <input type="text" name="username">
                    <span style="color:red">{{ message.username }}</span>
                </p>
                <p>
                    password:
                    <input type="text" name="password">
                    <span style="color:red">{{ message.password }}</span>
                </p>
                <input type="submit">
    
            </form>
    
            上述的需求完成以后,但是漏洞比较多,
            最重要的两条如下:
                1.输入不规范以后,所有内容全部清空
                2.输入框中校验的敏感词汇比较多,需要定义一个列表,查看输入的内容是否在该列表中,查询速度慢
    
    
    **************************************************************************************
    forms组件完善上面的功能:
    #使用forms组件,完成数据校验,展示错误信息
    #使用forms组件的前提是,你需要提前写一个类
    创建forms组件:
    from django import forms
    
    class MyForm(forms.Form):
        # username字段,最少三位,最多八位
        username = forms.CharField(max_length=8, min_length=3, label='用户名',
                                   error_messages={
                                       'max_length':'用户名最长八位',
                                       'min_length':'用户名最少三位',
                                       'required':'用户名不能为空',
                                   }
                                   )
        # password字段,最少三位,最多八位
        password = forms.CharField(max_length=8, min_length=3, label='密码',
                                   error_messages={
                                       'max_length':'密码最多8位',
                                       'min_length':'密码最少3位',
                                       'required':'密码不能为空'
                                   }
                                   )
        # email字段,必须是邮箱格式
        email = forms.EmailField(label='邮箱',error_messages={
            'required':'邮箱不能为空',    #required,校验不能为空的固定用法
            'invalid':'邮箱格式错误',     #invalid,专门用来校验邮箱格式错误的固定用法
            
        })
        '''
        1.label='xxx'是对应的input输入框前面的提示文字
        2.error_messages={
           'max_length':'密码最多8位',
           'min_length':'密码最少3位',
           'required':'密码不能为空'
        }   
        这个是固定格式,必填项必须用required也是固定的用法
        3.required,校验不能为空的固定用法
        4.invalid,专门用来校验邮箱格式错误的固定用法
        '''
    
    
        
    渲染标签:
        第一步,需要生成一个空的forms_obj,MyForm类的对象
        第二步,通过locals()和render方法渲染到前端index页面
        '''
    def index(request):
        forms_obj = MyForm()
        # 后端如何校验前端用户传入的数据
        if request.method == 'POST':
    
            #获取用户的数据,request.POST正好是一个字典,
            #request.POST作为该类的参数传入MyForm()类中,
            #然后再交给Forms组件来校验数据
            #注意事项,这两个forms_obj对象必须要书写一致
            forms_obj=MyForm(request.POST)
            if forms_obj.is_valid():
                print(forms_obj.cleaned_data)   #打印成功的数据
                return HttpResponse('数据全部OK')
    
            else:
                print(forms_obj.errors)     #打印错误的数据
    
        '''
        获取用户的数据 request.POST正好是一个字典
        检验数据神6条中的第二条:
            2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
            form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'})
    
        '''
    
    
        # for forms in forms_obj:
        #     print('我是',forms)
        '''
        forms 相关打印结果:
        我是 < input
        type = "text"
        name = "username"
        maxlength = "8"
        minlength = "3"
        required
        id = "id_username" / >
        '''
    
        #{{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示
        #{{ forms }} 是表单中所有的输入框
        #{{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看
    
    
        # 直接将生成的对象,传递给前端页面
        return render(request, 'index.html', locals())
    
    渲染标签和展示信息
    如何高速浏览器不做校验,form表单中加一个 novalidate 参数即可
        <p>forms组件渲染标签和展示信息 </p>
        <form action="" method="post" novalidate>
            {% for forms in form_obj %}
            <p>
                {{ forms.label }}{{ forms }}            #渲染标签
                <span>{{ forms.errors.0 }}</span>       #展示错误的提示信息
            </p>  <!--form 等价于你方式2中的对象点字段名-->
            {% endfor %}
            <input type="submit">
        </form>
    
    
    
    
    检验数据神6条:
            1.通过Python解释器中的Python Console,导入MyForm类
                from app01 import views
    
            2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
            form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'})
    
            3.查看校验数据是否合法
            form_obj.is_valid()
            返回TRUE或者FALSE,FALSE代表数据中有错误
    
            4.如何查看不符合规则的字段和错误的原因
                form_obj.errors
                返回错误信息在控制台:
                {
                'email':['Enter a valid email address']
                }
    
            5.如何查看符合校验规则的数据
            form_obj.cleaned_date
            返回符合规则的数据:
            {
            'username':'jason',
            'password':123
            }
    
            6.forms组件中,定义的字段默认都是必须要传值的,
            注意事项,重要规则,传入的数据中属于我自己的东西,少一个也不行,
            不属于我的东西,多给我我也不会要。
    
            form_obj = views.MyForm({'username':'jason','password':'12345','email':'123@qq.com','xxx':'嘿嘿嘿'})
            form_obj.is_valid()
            True
    
    
    
                {% for forms in forms_obj %}
    
                <p>{{ forms.label }}:{{ forms }}</p>
                <span>{{ forms.errors.0 }}</span>
                <span>{{ forms.label }}</span>
                <span>{{ forms }}</span>
    
                #{{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示
                #{{ forms }} 是表单中所有的输入框
                #{{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看
    
               {% endfor %}
    
    
    
    
    
    
    
  • 相关阅读:
    Java中RuntimeException和Exception的区别
    dubbo常见错误
    Spring3.x 版本和 JDK1.8 不兼容导致 java.lang.IllegalStateException: Failed to load ApplicationContext
    @Autowired与@Resource的区别
    阿里巴巴数据库连接池 druid配置详解
    HttpDns原理
    spring四种依赖注入方式
    JdbcTemplate
    springmvc常用注解标签详解
    访问spring接口一定要用.do么?
  • 原文地址:https://www.cnblogs.com/ludundun/p/11981015.html
Copyright © 2020-2023  润新知