1.分页器
作用:干啥的?数据量大的话,可以分页获取,查看。
2.一次性插入多条数据


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一下
前端代码


<!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>
后台代码


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'] = 101dic['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_rangeexcept Exception as e:current_page_num = 1current_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"元素一律点击无效