批量插入数据
首先是普通创建
结果我们发现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 }}