zoukankan      html  css  js  c++  java
  • 批量插入数据,自定义分页器

    批量插入数据

    首先是普通创建

    结果我们发现for循环创建数据 1000本太慢了,效率极低,每次都要去走一次数据库

    for i in range(1000):
        models.Book.ojbects.create(name='第%s书'%i)
    

    bulk_create批量处理 可以一次性的插入多条数据

    a = [] # 先生成一个容器
    for i in range(100000):
    	# 再不断地向容器添加生成的数据
        a.append(models.Book(name='第%s书'%s))
    # 最后利用bulk_create批量插入数据
    models.Book.objects.bulk_create(a)
    book_qeryset = models.Book.objects.all()  #插入的数据查询出来展示到前端
    return render(request,'test.html',locals())
    

    先放在一个列表里面,bulk_create

    自定义分页器

    这么多书的标签只在一个网页里面 明显不合理

    建立分页器 divmod(100,9) 返回触发的结果或者余数

    **大致思路 **

    """
    1.获取用户想要获取的页码数,如果没有就给默认展示第一页
    2.每页展示10条数据
    3.定义起始位置和终止位置  (应该为动态的数据)
    4.统计数据的总条数
    5.求数据到底需要多少页才能展示完
    
    """
    

    那么我们的数据必须动态展示,扩展性要高一点,所以..

    current_page = request.Get.get('page',1) # 没有page参数,就默认展示第一页
    
    current_page = int(current_page)
    per_page_num = 10 # 每页展示10条数据   
    # 还需要定义起始的位置和终止位置
    start_page = (current_page-1)* per_page_num
    end_page = current_page*per_page_num
    
    """
    per_page_num = 10
    current_page 第一页的时候start_page 数据是从0-10
    第二页的时候则是    start_page则是10-20
    列出如下列表
    er_page_num = 10
    current_page                   start_page                      end_page
        1                              0                                10
        2                              10                               20
        3                              20                               30 
        4                              30                               40
    
    所以得出关系式为start_page = (current_page-1)* per_page_num
    end_page = current_page*per_page_num
    
    
    """
    

    代码实现..可以在后端写完代码,放在前端里面.

    def index(request):
        # 1获取用户想要访问的页码数
        current_page = request.GET.get('page',1) # 默认为1		
        # 转成整型
        current_page = int(current_page)
        # 2每页展示10条数据
        per_page_num = 10
        
        # 3定义起始位置跟终止位置
        start_page = (current_page-1)*per_page_num
        end_page = current_page*per_page_num
        
        # 4统计数据的总条数便于计算
        book_queryset = models.Book.objects.all()
        all_count = book_queryset.count()
        
        # 5计算页数
        page_num, res = divmod(all_count, per_page_num)
        if res: 
            page_num+=1
    	page_html = ''
        xxx = current_page # xxx 就是用户点击的数字
        if current_page <6:
            current_page = 6
    	for i in range(current_page-5, current_page+6):
            if xxx ==i:
                page_html += '<li class="active"><a href="?page=%s">%s</a></li>'%(i, i)
        book_queryset = book_queryset[start_page:end_page]
        return render(request, 'index.html', locals())
        
    

    弄了这么多还是使用别人写的香

    自定义分页器的使用

    新建一个py文件直接将代码拷贝进去

            后端
                from app01.utils.mypage import Pagination
                # 使用封装好的分页器代码
                def login(request):
                    book_queryset = models.Book.objects.all()
                    current_page = request.GET.get('page',1)
                    all_count = book_queryset.count()
                    # 1.实例化产生对象
                    page_obj = Pagination(current_page=current_page,all_count=all_count)
                    # 2.对真实数据进行切片操作
                    page_queryset = book_queryset[page_obj.start:page_obj.end]
                    return render(request,'login.html',locals())
    
        前端
            
            {% for book_obj in page_queryset %}
                <p>{{ book_obj.title }}</p>
            {% endfor %}
            {{ page_obj.page_html|safe }}
    
  • 相关阅读:
    Delphi编译器属性(特别修饰符Ref,Unsafe,Volatile,Weak)
    .netcore dapr微服务入门
    Net WebApi一个简单的Token验证
    发布订阅和观察者模式
    NET Core创建Windows服务
    jquery.barrager.js弹幕实现
    跨平台中的RN、Flutter,服务端GraphQL、Serverless,Node和Electron
    分布式系统与高并发高可用
    11 个 Linux 命令
    接口幂等性
  • 原文地址:https://www.cnblogs.com/jhpy/p/11761328.html
Copyright © 2011-2022 走看看