自动序列化

借助serializers帮你自动完成序列化

from app01 import models
from django.core import serializers
def ab_se(request):user_queryset = models.Userinfo.objects.all()#原始方法user_list = []for user_obj in user_queryset:user_list.append({'username':user_obj.username,'password':user_obj.password,'gender':user_obj.get_gender_display(),})res = json.dumps(user_list)#方法****2res = serializers.serialize('json',user_queryset)  # 序列化return HttpResponse(res)

批量插入数据

models.Book.objects.bulk_create(book_list)

分页器

#原始分页 切片
book_queryset=models.Book.objects.all()[0:10]

自定义

补充:

封装代码的思路

1.先用最粗糙的代码实现功能

2.在功能基础上,再考虑优化

a.先函数

b.在对象

并不一定要面向对象

用到非django内置的第三方功能或组件代码时,

一般创建utils文件夹,一般在project根目录,在文件夹内对模块进行功能性划分

utils可以在每个应用创建,具体看实际情况。

class

class Pagination(object):def __init__(self,current_page,all_count,per_page_num=2,pager_count=11):"""封装分页相关数据:param current_page: 当前页:param all_count:    数据库中的数据总条数:param per_page_num: 每页显示的数据条数:param pager_count:  最多显示的页码个数用法:queryset = model.objects.all()page_obj = Pagination(current_page,all_count)page_data = queryset[page_obj.start:page_obj.end]获取数据用page_data而不再使用原始的queryset获取前端分页样式用page_obj.page_html"""try:current_page = int(current_page)except Exception as e:current_page = 1if current_page <1:current_page = 1self.current_page = current_pageself.all_count = all_countself.per_page_num = per_page_num# 总页码all_pager, tmp = divmod(all_count, per_page_num)if tmp:all_pager += 1self.all_pager = all_pagerself.pager_count = pager_countself.pager_count_half = int((pager_count - 1) / 2)@propertydef start(self):return (self.current_page - 1) * self.per_page_num@propertydef end(self):return self.current_page * self.per_page_numdef page_html(self):# 如果总页码 < 11个:if self.all_pager <= self.pager_count:pager_start = 1pager_end = self.all_pager + 1# 总页码  > 11else:# 当前页如果<=页面上最多显示11/2个页码if self.current_page <= self.pager_count_half:pager_start = 1pager_end = self.pager_count + 1# 当前页大于5else:# 页码翻到最后if (self.current_page + self.pager_count_half) > self.all_pager:pager_end = self.all_pager + 1pager_start = self.all_pager - self.pager_count + 1else:pager_start = self.current_page - self.pager_count_halfpager_end = self.current_page + self.pager_count_half + 1page_html_list = []# 添加前面的nav和ul标签page_html_list.append('''<nav aria-label='Page navigation>'<ul class='pagination'>''')first_page = '<li><a href="?page=%s">首页</a></li>' % (1)page_html_list.append(first_page)if self.current_page <= 1:prev_page = '<li class="disabled"><a href="#">上一页</a></li>'else:prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)page_html_list.append(prev_page)for i in range(pager_start, pager_end):if i == self.current_page:temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)else:temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)page_html_list.append(temp)if self.current_page >= self.all_pager:next_page = '<li class="disabled"><a href="#">下一页</a></li>'else:next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)page_html_list.append(next_page)last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)page_html_list.append(last_page)# 尾部添加标签page_html_list.append('''</nav></ul>''')return ''.join(page_html_list)

后端

def get_book(request):book_list = models.Book.objects.all()current_page = request.GET.get("page",1)all_count = book_list.count()page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10)page_queryset = book_list[page_obj.start:page_obj.end]return render(request,'booklist.html',locals())

前端

<div class="container"><div class="row"><div class="col-md-8 col-md-offset-2">{% for book in page_queryset %}<p>{{ book.title }}</p>{% endfor %}{{ page_obj.page_html|safe }}</div></div>
</div>

参考:

https://www.cnblogs.com/guyouyin123/p/12173020.html

django11:自动序列化/批量插入数据/分页器相关推荐

  1. Django之批量插入数据、 自定义分页器

    文章目录 一. 批量插入数据 方法一: 方法二: 批量插入bulk_create方法 二. 自定义分页器 2.1 分页推导 2.2 数据总页面获取 2.3 内置方法之divmod 三. 自定义分页器终 ...

  2. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  3. MyBatis直接执行SQL查询及批量插入数据

    转:http://www.cnblogs.com/mabaishui/archive/2012/06/20/2556500.html 一.直接执行SQL查询: 1.mappers文件节选 <re ...

  4. 大数据写入到Oracle数据库(批量插入数据)

    开发中经常遇到批量插入数据的需求,为了提高开发效率大多会使用ORM架构,个别之处 才会手写SQL,我们使用C#.NET Core5.0开发,所以优先选择了微软的EF. 但是EF原生没有批量操作功能,需 ...

  5. 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化

    目录 ​ 一.PreparedStatement和Statement的区别去联系 一.preparedStatement与Statement的联系: 二.区别: 二.批量插入数据到数据的逐步优化 一. ...

  6. Mysql批量插入数据问题解决和优化

    Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...

  7. jdbc高效的批量插入数据

    一.Statement与PreparedStatement的选择 PrepardStatement继承于Statement,主要区别点是PreparedStatement实现了SQL预编译,从而一定程 ...

  8. 【JDBC】PreparedStatement实现批量插入数据

    题目:[JDBC]PreparedStatement实现批量插入数据 前言: PreparedStatement除了解决Statement的拼串.sql注入问题之外,还可以实现以下操作 Prepare ...

  9. mybatis-plus批量插入数据

    mybatis-plus批量插入数据 saveBatch 这样会非常慢? InsertBatchSomeColumn(批量插入 仅适用于mysql,一次插入多条数据) ruoyi中对BaseMappe ...

最新文章

  1. row_number() over (partition by....order by...)用法 分组排序
  2. docker 部署_GitLab CI 自动部署netcore web api 到Docker
  3. centos7 greenplum6.1开源版本编译
  4. 数据产品经理:6大数据分析平台的“世界观”
  5. CentOS 7下安装GUI图形界面
  6. pv 6.3升级日志
  7. 将软件添加到右键菜单 最简单的方法
  8. 最好用的三款epub阅读器
  9. html sql连接mysql数据库_HTML连接sql数据库
  10. 云桌面优缺点_云桌面中VDI架构有什么优势和劣势?
  11. 同一个项目中让R和Python无缝工作的五种方法
  12. opencv+VS2005安装说明
  13. ios7 未能连接到服务器,完美解决iTunes 未能连接到此 iPhone。发生未知错误(0xe8000003)和0xe8000084...
  14. [JAVA面试] java面试
  15. ISO七层模型与TCP/IP四层参考模型逐层解析
  16. 银企直连增加支付货币的配置方法 :事务FBZP
  17. 如何基于EasyCVR视频能力与AI技术助力工业园区智能管理?
  18. 钓鱼Wi-Fi搭建实践
  19. 阿里云服务器 之 mqtt服务器搭建及使用
  20. leetcode_345 Reverse Vowels of a String

热门文章

  1. 读“苹果上周发布了Mac OS X Mountain Lion系统”新闻的感想
  2. google code for xbmc addons2
  3. 基于NHibernate的留言本
  4. WPF 实现一个酷酷的Loading
  5. 有趣分享:国内产业图谱
  6. WPF任务栏同步进度
  7. C# Task 暂停与取消
  8. ASP.NET Core中使用令牌桶限流
  9. 一日一技:在Ocelot网关中统一配置Swagger
  10. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)