zoukankan      html  css  js  c++  java
  • day77

    昨日回顾:
       批量插入数据:
          -queryset的方法:bulk_create(对象列表,数字(一次插入多少))
       分页器:
          from django.core.paginator import Paginator
            book_list=models.Book.objeces.all()
            pageinator=Paginator(book_list,10)
            pageinator.cout
            pageinator.num_pages
            pageinator.page_range
            #生成当前页码对象
            current_page=pageinator.page(当前页)
            current_page.object_list
            current_page.has_next()
            current_page.has_pervious()
            上一页页码数
            下一页页码数
      
        前端:
           -模板语言for循环,输出所有页码数
            -总页码数不够11,有多少,就输出多少
            -总页码数大于11,
             -当前页码数<6:page_range=range(1,12)
             -当前页码+5>总页码数:page_range=range(pageinator.num_pages-10,pageinator.num_pages+1)
             -其他情况:page_range=range(current_page_num-5,current_page_num+6)
           -点中页码跳转
            -'?page=13'
            -'/index/?page=13'----->路径不要忘掉前面的斜杠
      
    今日内容
       forms组件
          -forms是什么?
             就是一个类,可以校验字段(前台传过来的字段)
          -怎么用:
            -校验字段功能:
             -先写一个类,继承Form
             from django.shortcuts import render, HttpResponse
             from django import forms
             # 写一个类,要校验那些字段,就是类的属性
             class MyForm(forms.Form):
              # 定义一个属性,可以用来校验字符串类型
              # 限制最大长度是8,最小长度是3
              name=forms.CharField(max_length=8,min_length=3)
              pwd=forms.CharField(max_length=8,min_length=3,required=True)
              # 校验是否是邮箱格式
              email=forms.EmailField()
           -使用:
    # 校验字段功能
    def index(request):
        if request.method == 'GET':
            return render(request, 'index.html')
        elif request.method == 'POST':
            # print(request.POST)
            form = User(request.POST)
            if form.is_valid():
                # 校验正确的数据
                print(form.cleaned_data)
            else:
                # 校验正确的数据
                print(form.cleaned_data)
                # 校验错误的字段:"错误的信息"
                print(form.errors)
                # 错误的信息
                print(form.errors.get('name'))
            return HttpResponse('OJBK')
    View Code
      -渲染模板
    {#方式一#}
    <form action="" method="post" novalidate>
        <p>{{ form.name.label }}{{ form.name }}</p>
        <p style="color: red">{{ form.name.errors.0 }}</p>
        <p>{{ form.pwd.label }}{{ form.pwd }}</p>
        <p style="color: red">{{ form.pwd.errors.0 }}</p>
        <p>{{ form.email.label }}{{ form.email }}</p>
        <p style="color: red">{{ form.email.errors.0 }}</p>
        <input type="submit" id="btn" value="登陆">
    </form>
    {#方式二#}
    <form action="" method="post" novalidate>
        {% for foo in form %}
            <p>{{ foo.label }}{{ foo }}</p>
        {% endfor %}
    </form>
    {#方式三#}
    <form action="" method="post" novalidate>
        {{ form.as_p }}
    View Code
      -渲染错误信息
         - myforms有errors
         -属性(name)也有errors
         -错误信息,变成中文:
          - error_messages={'max_length': '最长是8', 'min_length': '最短是3', 'required': '这个必须填','invalid': '不符合邮箱格式'}
         -给input标签指定样式,指定格式:
           -widget=widgets.TextInput(attrs={'class':'form-control'})
         -模板,渲染错误信息:<span>{{ myform.name.errors.0 }}</span>
      -局部钩子校验
         -定义一个函数,名字叫:clean_字段名字,内部,取出该字段,进行校验,如果通过,将该字段返回,如果失败,抛异常(ValidationError)
         -   def clean_name(self):
           # self:当前form对象
             name = self.cleaned_data.get('name')
             if name.startswith('sb'):
                # 失败,抛异常
                raise ValidationError('不能以sb开头')
             # 正常,把name返回
             return name
        def clean_name(self):
            name = self.cleaned_data.get('name')
            res = models.User.objects.filter(name=name)
            if res:
                raise ValidationError('用户名重复')
            return name
    View Code
      -全局钩子
         #重写clean方法
           def clean(self):
              #程序能走到该函数,前面校验已经通过了,所以可以从cleaned_data中取出密码和确认密码  
              pwd=self.cleaned_data.get('pwd')
              re_pwd=self.cleaned_data.get('re_pwd')
              #进行自己的校验
              if pwd==re_pwd:
                 #通过,直接返回cleaned_data
                 return self.cleaned_data
              else:
                 #失败,抛异常(ValidationError)
                 raise ValidationError('两次密码不一致')
        def clean(self):
            pwd = self.cleaned_data.get('pwd')
            re_pwd = self.cleaned_data.get('re_pwd')
            if pwd == re_pwd:
                return self.cleaned_data
            else:
                raise ValidationError('两次密码不一致')
    View Code
  • 相关阅读:
    java Activiti 工作流引擎 SSM 框架模块设计方案
    自定义表单 Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器
    数据库设计的十个最佳实践
    activiti 汉化 stencilset.json 文件内容
    JAVA oa 办公系统模块 设计方案
    java 考试系统 在线学习 视频直播 人脸识别 springboot框架 前后分离 PC和手机端
    集成 nacos注册中心配置使用
    “感恩节 ”怼记
    仓颉编程语言的一点期望
    关于System.out.println()与System.out.print("\n")的区别
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/9998391.html
Copyright © 2011-2022 走看看