1.分页器
作用:干啥的?数据量大的话,可以分页获取,查看。
2.一次性插入多条数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
def add1(request): # 这样for循环会造成对数据库的大量访问,不建议这样添加 # models.Book.objects.create(name='连城诀%s'%i,price=10+i) ll=[] for i in range(100): ll.append(models.Book(name='连城诀%s' %i,price=10+i)) #批量插入,两个参数,第一个是对象列表,第二个是一次插入的数据量,不填,默认一次全插入 models.Book.objects.bulk_create(ll) return HttpResponse('OJ8K')
在这里注意要使用批量插入,减少访问mysql数据库的次数
3.分页器代码
book_list = models.Book.objects.get_queryset().order_by('id')#当分页提示报警时,可以order by id一下
前端代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="/static/jquery-3.3.1.js"></script> {% load static %} <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}"> <link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css"> <title>Title</title> </head> <body> <div class="col-md-6 col-md-offset-3"> <div class="row"> <table class="table table-bordered"> <thead> <tr> <td>书名</td> <td>价格</td> </tr> </thead> <tbody> {% for book in current_page %} <tr> <td>{{ book.name }}</td> <td>{{ book.price }}</td> </tr> {% endfor %} </tbody> </table> </div> <nav aria-label="Page navigation"> <ul class="pagination"> {% if current_page.has_previous %} <li> <a href="/booklist/?page={{ current_page.previous_page_number }}" aria-label="Previous"> <span aria-hidden="true">上一页</span> </a> </li> {% else %} <li class="disabled"> <a href="" aria-label="Previous"> <span aria-hidden="true">上一页</span> </a> </li> {% endif %} {% for foo in page_range %} {% if current_page_num == foo %} <li class="active"><a href="/booklist/?page={{ foo }}">{{ foo }}</a></li> {% else %} <li><a href="/booklist/?page={{ foo }}">{{ foo }}</a></li> {% endif %} {% endfor %} {% if current_page.has_next %} <li> <a href="/booklist/?page={{ current_page_num|add:1 }}" aria-label="Next"> <span aria-hidden="true">下一页</span> </a> </li> {% else %} <li class="disabled"> <a href="" aria-label="Next"> <span aria-hidden="true">下一页</span> </a> </li> {% endif %} </ul> </nav> </div> </body> </html>
后台代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
from django.shortcuts import render, HttpResponse, reverse, redirect from app01 import models from django.http import JsonResponse from django.core.paginator import Paginator, EmptyPage # Create your views here. def index(request): return render(request, 'index.html') def login(request): dic = {'status': 100, 'msg': None} name = request.POST.get('name') password = request.POST.get('password') user = models.User.objects.filter(name=name, password=password) print(request.POST) if user: dic['msg'] = '登录成功' return JsonResponse(dic) else: dic['status'] = 101 dic['msg'] = '用户名或密码错误' return JsonResponse(dic) def add1(request): # 这样for循环会造成对数据库的大量访问,不建议这样添加 # models.Book.objects.create(name='连城诀%s'%i,price=10+i) ll = [] for i in range(100): ll.append(models.Book(name='连城诀%s' % i, price=10 + i)) # 批量插入,两个参数,第一个是对象列表,第二个是一次插入的数据量,不填,默认一次全插入 models.Book.objects.bulk_create(ll) return HttpResponse('OJ8K') # def booklist(request): # if request.method=='GET': # #查询所有图书 # books=models.Book.objects.all() # from django.core.paginator import Paginator#导入分页器 # #分页器,类。要实例化产生对象,要传两个参数:object_list:对象列表,per_page:每页显示的条数 # paginator=Paginator(books,10) # # print(paginator.count)#打印总条数 # # print(paginator.num_pages)#打印总页数 # # print(paginator.page_range)#页码数的列表 # current_page=paginator.page(5)#取到第x页,返回一个Page对象 # print(current_page.object_list)#取当前页码所有数据 # print(current_page.has_next())#是否有下一页 # print(current_page.has_previous())#是否有上一页 # print(current_page.next_page_number())#下一页页码数 # print(current_page.previous_page_number())#上一页页码数 # return render(request,'booklist.html',locals()) # def booklist(request): # from django.core.paginator import Paginator # books=models.Book.objects.all() # paginator=Paginator(books,3) # try: # current_page_num=int(request.GET.get('page')) # current_page=paginator.page(current_page_num) # # for item in current_page:#既可以循环current_page,又可以循环当前页的对象current_page.object_list # # print(item)#拿到前端去用 # except EmptyPage as e: # #捕获异常后调到第一页 # current_page_num=1 # current_page=paginator.page(current_page_num) # except Exception as e: # current_page_num = 1 # current_page = paginator.page(current_page_num) # return render(request,'booklist.html',locals()) def booklist(request): book_list = models.Book.objects.get_queryset().order_by('id')#当分页提示报警时,可以order by id一下 paginator = Paginator(book_list, 3) # 如果页码数多,让它显示前5,后5,中间是当前在的页 try: current_page_num = int(request.GET.get('page')) current_page = paginator.page(current_page_num) if paginator.num_pages > 11: if current_page_num - 5 < 1: page_range = range(1, 12) elif current_page_num + 5 > paginator.num_pages: page_range = range(paginator.num_pages - 11, paginator.num_pages) else: page_range = range(current_page_num - 5, current_page_num + 5) else: page_range = paginator.page_range except Exception as e: current_page_num = 1 current_page = paginator.page(current_page_num) return render(request, 'booklist.html', locals())
range是前闭后开区间,range(1,11)表示[0,11)之间的所有整数.注意分页要分成一个range区间,range别忘记写上
page_range=range(1,current_page_num+5)
注意request获取到的页码是字符串,要转成int类型
current_page_num = request.GET.get('page') current_page_num=int(current_page_num)
4.bootstrap样式
class="disabled"元素一律点击无效