后端数据库分页是根据limit实现的

第一种写法: limit 每页的个数 offset 起始位置

selectid,name,sex,tel,addrfromuserlimit1offset1;

select*fromstudentlimitpageSizeoffset(pageNumber-1)*pageSize

第二种写法: limit 起始位置,每页的个数

selectid,namefromuserlimit1,2;

select*fromstudnetlimit(pageNumber-1)*pageSize,pageSize

当数据量比较大的时候分页采用子查询的方式

selectid,namefromuserwhereid>=(selectidfromuserorderbyidlimit1,1)limit2;

selectid,namefromuserwhereid>=(selectidfromuserorderbyidlimit起始位置,1)limit每页的个数;

Python代码中实现后台数据分页

views.py文件

Page()函数是mypage.py里边类的方法

user_count() 是获取mysql 数据总数的方法

defindex(request):page_num=request.GET.get("page")login_user=request.session.get('user')count=user_count()per_page=2page_obj=Page(page_num,count,url_prefix="/users/",per_page=2,max_page=4,)page_num=page_obj.numusers=mysql_page(per_page,page_num)page_html=page_obj.page_html()returnrender(request,'static/index.html',{"users":users,"login_user":login_user,"page_html":page_html})

mypage.py

classPage():def__init__(self,page_num,total_count,url_prefix,per_page,max_page=4):""":parampage_num:当前页码数:paramtotal_count:数据总数:paramurl_prefix:a标签href的前缀:paramper_page:每页显示多少条数据:parammax_page:页面上最多显示几个页码"""self.url_prefix=url_prefixself.max_page=max_page#每一页显示多少条数据#总共需要多少页码来展示total_page,m=divmod(total_count,per_page)ifm:total_page+=1self.total_page=total_pagetry:page_num=int(page_num)#如果输入的页码数超过了最大的页码数,默认返回最后一页ifpage_num>total_page:page_num=total_pageexceptExceptionase:#当输入的页码不是正经数字的时候默认返回第一页的数据page_num=1self.page_num=page_num#页面上总共展示多少页码iftotal_page<self.max_page:self.max_page=total_page@propertydefnum(self):returnself.page_numdefpage_html(self):#自己拼接分页的HTML代码html_str_list=[]#加上第一页html_str_list.append('<li><ahref="{}?page=1">首页</a></li>'.format(self.url_prefix))#判断一下如果是第一页,就没有上一页ifself.page_num<=1:html_str_list.append('<liclass="disabled"><ahref="#"><spanaria-hidden="true">&laquo;</span></a></li>'.format(self.page_num-1))else:#加一个上一页的标签html_str_list.append('<li><ahref="{}?page={}"><spanaria-hidden="true">&laquo;</span></a></li>'.format(self.url_prefix,self.page_num-1))foriinrange(1,self.total_page+1):#如果是当前页就加一个active样式类ifi==self.page_num:tmp='<liclass="active"><ahref="{0}?page={1}">{1}</a></li>'.format(self.url_prefix,i)else:tmp='<li><ahref="{0}?page={1}">{1}</a></li>'.format(self.url_prefix,i)html_str_list.append(tmp)#加一个下一页的按钮#判断,如果是最后一页,就没有下一页ifself.page_num>=self.total_page:html_str_list.append('<liclass="disabled"><ahref="#"><spanaria-hidden="true">&raquo;</span></a></li>')else:html_str_list.append('<li><ahref="{}?page={}"><spanaria-hidden="true">&raquo;</span></a></li>'.format(self.url_prefix,self.page_num+1))#加最后一页html_str_list.append('<li><ahref="{}?page={}">尾页</a></li>'.format(self.url_prefix,self.total_page))page_html="".join(html_str_list)returnpage_html

models,py

defmysql_page(per_page,page):start=(page-1)*per_pagesql='selectid,name,sex,age,tel,addr,rolefromuserwhereid>=\(selectidfromuserorderbyidlimit%s,1)limit%s'args=(start,per_page)conn=MySQLdb.connect(host=MYSQL_HOST,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PASSWORD,db=MYSQL_DB,charset='utf8mb4')cursor=conn.cursor()cursor.execute(sql,args)lines=cursor.fetchall()users=[]forlineinlines:users.append({'id':line[0],'name':line[1],'sex':'男'ifline[2]else'女','age':line[3],'tel':line[4],'addr':line[5],'role':line[6]})cursor.close()conn.close()returnusers