zoukankan      html  css  js  c++  java
  • 【2020Python修炼记】web框架之数据批量插入/分页器

    【目录】

    数据批量插入

    分页器

    • 自己写一个分页器(只需要掌握分页器的推导思路即可)

    • 自定义分页器的拷贝及使用(简单几行代码即可 需要掌握)

     

    数据批量插入

    def ab_pl(request):
        # 先给Book插入一万条数据
        # for i in range(10000):
        #     models.Book.objects.create(title='第%s本书'%i)
        # # 再将所有的数据查询并展示到前端页面
        book_queryset = models.Book.objects.all()
    
        # 批量插入
        # book_list = []
        # for i in range(100000):
        #     book_obj = models.Book(title='第%s本书'%i)
        #     book_list.append(book_obj)
        # models.Book.objects.bulk_create(book_list)
        """
        当你想要批量插入数据的时候 使用orm给你提供的bulk_create能够大大的减少操作时间
        :param request: 
        :return: 
        """
        return render(request,'ab_pl.html',locals())

     

    分页器

    """
    总数据100 每页展示10 需要10
    总数据101 每页展示10 需要11
    总数据99 每页展示10  需要10
    
    如何通过代码动态的计算出到底需要多少页?
    
    
    在制作页码个数的时候 一般情况下都是奇数个        符合中国人对称美的标准
    """
    # 分页
        book_list = models.Book.objects.all()
    
        # 想访问哪一页
        current_page = request.GET.get('page',1)  # 如果获取不到当前页码 就展示第一页
        # 数据类型转换
        try:
            current_page = int(current_page)
        except Exception:
            current_page = 1
        # 每页展示多少条
        per_page_num = 10
        # 起始位置
        start_page = (current_page - 1) * per_page_num
        # 终止位置
        end_page = current_page * per_page_num
    
        # 计算出到底需要多少页
        all_count = book_list.count()
    
        page_count, more = divmod(all_count, per_page_num)
        if more:
            page_count += 1
    
        page_html = ''
        xxx = current_page
        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)
            else:
                page_html += '<li><a href="?page=%s">%s</a></li>'%(i,i)
    
    
    
        book_queryset =  book_list[start_page:end_page]
        
    """
    django中有自带的分页器模块 但是书写起来很麻烦并且功能太简单
    所以我们自己想法和设法的写自定义分页器
    
    上述推导代码你无需掌握 只需要知道内部逻辑即可
    
    我们基于上述的思路 已经封装好了我们自己的自定义分页器 
    之后需要使用直接拷贝即可
    """

     

    """
    当我们需要使用到非django内置的第三方功能或者组件代码的时候
    我们一般情况下会创建一个名为utils文件夹 在该文件夹内对模块进行功能性划分
        utils可以在每个应用下创建 具体结合实际情况
    
    我们到了后期封装代码的时候 不再局限于函数
    还是尽量朝面向对象去封装
    
    我们自定义的分页器是基于bootstrap样式来的 所以你需要提前导入bootstrap
        bootstrap 版本 v3
        jQuery        版本 v3
    """
    # 后端
    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]
    # 3 将page_queryset传递到页面 替换之前的book_queryset
    
    
    # 前端
    {% for book_obj in page_queryset %}
        <p>{{ book_obj.title }}</p>
        <nav aria-label="Page navigation">
    </nav>
    {% endfor %}
    {#利用自定义分页器直接显示分页器样式#}
    {{ page_obj.page_html|safe }}
      
    """
    你们只需要掌握如何拷贝使用 以及大致的推导思路即可
    """

     

     

     

    参考阅读: 

    批量插入数据:

    https://www.cnblogs.com/Dominic-Ji/articles/12035664.html

    自定义分页器:

    https://www.cnblogs.com/Dominic-Ji/articles/12035722.html

     

     

  • 相关阅读:
    .NET控件ZedGraph使用帮助
    .NET多线程编程(转)
    DataTable 添加列、设置主键、添加行、查询、更新
    一个有用的Windows服务小程序——用来完成Server端的Socket通信[转载]
    (周星驰版)学习委托的最好实例 (转载+自己补充了注释)
    这样写
    DataTable添加列和行的方法
    简单工厂之简单模型(uml)
    学了delegate委托还有event事件的联系,基本学明白了。先总结一下吧。[转载]
    HDU_1240——三维空间DFS
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/13039745.html
Copyright © 2011-2022 走看看