django11:自动序列化/批量插入数据/分页器
自动序列化
借助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:自动序列化/批量插入数据/分页器相关推荐
- Django之批量插入数据、 自定义分页器
文章目录 一. 批量插入数据 方法一: 方法二: 批量插入bulk_create方法 二. 自定义分页器 2.1 分页推导 2.2 数据总页面获取 2.3 内置方法之divmod 三. 自定义分页器终 ...
- MySQL批量插入数据的几种方法
最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...
- MyBatis直接执行SQL查询及批量插入数据
转:http://www.cnblogs.com/mabaishui/archive/2012/06/20/2556500.html 一.直接执行SQL查询: 1.mappers文件节选 <re ...
- 大数据写入到Oracle数据库(批量插入数据)
开发中经常遇到批量插入数据的需求,为了提高开发效率大多会使用ORM架构,个别之处 才会手写SQL,我们使用C#.NET Core5.0开发,所以优先选择了微软的EF. 但是EF原生没有批量操作功能,需 ...
- 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化
目录 一.PreparedStatement和Statement的区别去联系 一.preparedStatement与Statement的联系: 二.区别: 二.批量插入数据到数据的逐步优化 一. ...
- Mysql批量插入数据问题解决和优化
Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...
- jdbc高效的批量插入数据
一.Statement与PreparedStatement的选择 PrepardStatement继承于Statement,主要区别点是PreparedStatement实现了SQL预编译,从而一定程 ...
- 【JDBC】PreparedStatement实现批量插入数据
题目:[JDBC]PreparedStatement实现批量插入数据 前言: PreparedStatement除了解决Statement的拼串.sql注入问题之外,还可以实现以下操作 Prepare ...
- mybatis-plus批量插入数据
mybatis-plus批量插入数据 saveBatch 这样会非常慢? InsertBatchSomeColumn(批量插入 仅适用于mysql,一次插入多条数据) ruoyi中对BaseMappe ...
最新文章
- row_number() over (partition by....order by...)用法 分组排序
- docker 部署_GitLab CI 自动部署netcore web api 到Docker
- centos7 greenplum6.1开源版本编译
- 数据产品经理:6大数据分析平台的“世界观”
- CentOS 7下安装GUI图形界面
- pv 6.3升级日志
- 将软件添加到右键菜单 最简单的方法
- 最好用的三款epub阅读器
- html sql连接mysql数据库_HTML连接sql数据库
- 云桌面优缺点_云桌面中VDI架构有什么优势和劣势?
- 同一个项目中让R和Python无缝工作的五种方法
- opencv+VS2005安装说明
- ios7 未能连接到服务器,完美解决iTunes 未能连接到此 iPhone。发生未知错误(0xe8000003)和0xe8000084...
- [JAVA面试] java面试
- ISO七层模型与TCP/IP四层参考模型逐层解析
- 银企直连增加支付货币的配置方法 :事务FBZP
- 如何基于EasyCVR视频能力与AI技术助力工业园区智能管理?
- 钓鱼Wi-Fi搭建实践
- 阿里云服务器 之 mqtt服务器搭建及使用
- leetcode_345 Reverse Vowels of a String