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
  • 相关阅读:
    mysql删选某列重复值
    apache伪静态
    nginx的伪静态
    如何对数据库进行优化
    ci的优缺点
    memcache状态说明
    sql中扩展插入语法
    若给个 个人收款的二维码,如何测试?
    安装自动化测试工具selenium
    PHP 线上项目 无法操作
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/9998391.html
Copyright © 2011-2022 走看看