第二百六十七节,Tornado框架-分页封装模块
Tornado框架-分页封装模块
框架引擎
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件
from controllers import index settings = { #html文件归类配置,设置一个字典
"template_path":"views", #键为template_path固定的,值为要存放HTML的文件夹名称
"static_path":"statics", #键为static_path固定的,值为要存放js和css的文件夹名称
} #路由映射
application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法
(r"/index/(?P<page>\d*)", index.indexHandler), #正则匹配访问路径,访问录index/后面可以是可以是0个或多个数字
],**settings) #将html文件归类配置字典,写在路由映射的第二个参数里 if __name__ == "__main__":
#内部socket运行起来
application.listen(8888) #设置端口
tornado.ioloop.IOLoop.instance().start()
封装分页类模块
写一个类来封装分页功能
__init__接收各种需要的参数
shu_ju_fan_wei()方法,返回的显示范围数据
xian_shi_ye_ma()方法,返回页码数据
#!/usr/bin/env python
#coding:utf-8 #封装分页类模块
class fen_ye_lei:
def __init__(self,dang_qian_ye,shu_ju,tiao_shu,ye_ma_shu,qian_hou_ye,url):
"""
一个参数接收当前页
第一个参数,接收分页数据列表
第二个参数,接收每页显示多少条数据
第三个参数,每页显示多少个页码
第四个参数,显示当前页码前几个和后几个页码,需要结合每页显示多少个页码计算
第五个参数,分页连接url后缀,也就是路由映射的后缀
"""
try: #尝试执行
dang_qian_ye = int(dang_qian_ye) #将当前页换成数字类型
except: #如果出错
dang_qian_ye = 1 #当前页等于1
if dang_qian_ye < 1: #判断当前页如果小于1
dang_qian_ye = 1 #当前页等于1 self.dang_qian_ye = dang_qian_ye #当前页
self.shu_ju = shu_ju #接收分页数据列表
self.tiao_shu = tiao_shu #接收每页显示多少条数据
self.ye_ma_shu = ye_ma_shu #每页显示多少个页码
self.qian_hou_ye = qian_hou_ye #显示当前页码前几个和后几个页码,需要结合每页显示多少个页码计算
self.url = url #分页连接url后缀,也就是路由映射的后缀 # 计算总页码
zong_ye_ma, c = divmod(len(self.shu_ju), self.tiao_shu) #数据总量除以显示条数,取余,两个变量接收,第一个变量得到相除后的整数,后一个变量得到相除后的余数(小数)
if c > 0: #判断余数如果大于0,
zong_ye_ma += 1 #页面数等于整数加1,等于分页总量
self.zong_ye_ma = zong_ye_ma #接收总页码 def shu_ju_fan_wei(self):
"""
shu_ju_fan_wei()方法,返回每页获取范围数据
"""
#换算每页获取范围数据
qi_shi = (self.dang_qian_ye - 1) * self.tiao_shu #当前页码获取数据起始位置
jie_shu = self.dang_qian_ye * self.tiao_shu #当前页码获取数据结束位置
xian_shi = self.shu_ju[qi_shi:jie_shu] #通过起始和结束位置以下标方式获取指定范围的列表数据,xian_shi传到html模板显示数据
return xian_shi def xian_shi_ye_ma(self):
"""
xian_shi_ye_ma()方法,返回页码数据
"""
# 计算每页显示多少个页码
# 假设每页显示11个页码,当前页的前5个和后5个
# 所以需要动态调整循环里的值
if self.zong_ye_ma < self.ye_ma_shu: # 判断总页码小于每页显示多少个页码
s = 1 # 起始页码为1
t = self.zong_ye_ma # 结束页码为总页码
else:
if self.dang_qian_ye <= self.qian_hou_ye + 1: # 判断当前页码小于前后页码数
s = 1 # 起始页码为1
t = self.ye_ma_shu # 结束页码为每页显示多少个页码
else:
if (self.dang_qian_ye + self.qian_hou_ye) > self.zong_ye_ma: # 判断当前页加前后页码数如果大于总页码数
s = self.zong_ye_ma - (self.ye_ma_shu - 1) # 起始页为总页数减以(每页显示多少个页码减一)
t = self.zong_ye_ma # 结束页为总页码数
else:
s = self.dang_qian_ye - self.qian_hou_ye # 起始页为当前页减以前后页码数
t = self.dang_qian_ye + self.qian_hou_ye # 结束页为当前页加前后页码数 ye_ma_lie_biao = [] # 创建列表接收页码数据 #首页
sh_temp = '<li><a href="%s1">首页</a></li>' % (self.url)
ye_ma_lie_biao.append(sh_temp) #上一页
if self.dang_qian_ye <= 1:
shye = '<li><a href="javascript:void(0);">上一页</a></li>'
ye_ma_lie_biao.append(shye)
else:
shye = '<li><a href="%s%s">上一页</a></li>' %(self.url,self.dang_qian_ye-1)
ye_ma_lie_biao.append(shye) for i in range(s, t + 1): # 根据分页总量循环次数
if i == self.dang_qian_ye: # 判断循环到的页码等于当前页面
temp = '<li class="yem"><a href="%s%s">%s</a></li>' % (self.url,i, i) # 格式化当前页码设置样式
else:
temp = '<li><a href="%s%s">%s</a></li>' % (self.url,i, i) # 格式化当前页码
ye_ma_lie_biao.append(temp) # 将格式化的页码数据追加到列表 #下一页
if self.dang_qian_ye >= self.zong_ye_ma:
xye = '<li><a href="javascript:void(0);">下一页</a></li>'
ye_ma_lie_biao.append(xye)
else:
xye = '<li><a href="%s%s">下一页</a></li>' %(self.url,self.dang_qian_ye+1)
ye_ma_lie_biao.append(xye) #尾页
wei_temp = '<li><a href="%s%s">尾页</a></li>' % (self.url,self.zong_ye_ma)
ye_ma_lie_biao.append(wei_temp) xian_shi = "\n".join(ye_ma_lie_biao) # 将页面数据,连接成一个字符串,传输到HTML模板
return xian_shi
逻辑处理
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件
from pymkuai import fenye #导入分页模块 SHUJU = [
{"user":"lgx","emia":"729088188@qq.com"}
]
for f in range(300):
SHUJU.append({"user": "lgx", "emia": "729088188@qq.com"}) #填充数据到300条 #逻辑处理
class indexHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下的RequestHandler类
def get(self,page): #get()方法,接收get方式请求 fen_ye = fenye.fen_ye_lei(page,SHUJU,10,11,5,'/index/') #执行分页对象 if fen_ye.dang_qian_ye > fen_ye.zong_ye_ma: #判断分页对象里的当前页码如果大于总页码
zfchdqy = str(fen_ye.zong_ye_ma) #将总页码转换成字符串
self.redirect("/index/" + zfchdqy) #跳转到总页码
else:
self.render("index.html",dqy=fen_ye.dang_qian_ye,shuju=fen_ye.shu_ju_fan_wei(),yem=fen_ye.xian_shi_ye_ma()) # 显示index.html文件,传递当前页码,传递数据,传递分页 def post(self,page):
user = self.get_argument("user") #接收用户提交的用户名
emia = self.get_argument("emia") #接收用户提交的邮箱
temp = {"user":user,"emia":emia} #将邮箱和用户名组合成字典,
SHUJU.append(temp) #将字典追加到SHUJU全局变量
self.redirect("/index/" + page) #跳转到当前页面
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href='{{static_url("s1.css")}}'>
</head>
<body>
<h1>提交数据</h1>
<form method="post" action="/index/{{dqy}}">
用户名:<input name="user" type="text"/>
邮箱:<input name="emia" type="text"/>
<input type="submit" value="提交"/>
</form>
<h1>显示数据</h1>
<table border="1">
<thead>
<tr>
<th>用户名</th>
<th>邮箱</th>
</tr>
</thead>
<tbody>
<!--循环接收到的shuju显示到表格-->
{% for i in shuju %}
<tr>
<td>{{i["user"]}}</td>
<td>{{i["emia"]}}</td>
</tr>
{% end %}
</tbody>
</table>
<ul class="fy">
{% raw yem %}
</ul>
</body>
</html>

第二百六十七节,Tornado框架-分页封装模块的更多相关文章
- 第二百六十二节,Tornado框架-cookie
Tornado框架-cookie Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购物数据信息等一系列微小信息. self.set_cookie()方法,创 ...
- 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中
第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...
- 第二百六十一节,Tornado框架模板引擎本质
Tornado框架模板引擎本质 只需要了解一下即可 本篇就来详细的剖析模板处理的整个过程. 上图是返回给用户一个html文件的整个流程,较之前的Demo多了绿色流线的步骤,其实就是把[self.wri ...
- 第二百六十节,Tornado框架-内置模板方法
Tornado框架-内置模板方法 直接在html文件使用,不需要传值 Tornado默认提供的这些功能其实本质上就是 UIMethod 和 UIModule,也就是Tornado框架定义好的html文 ...
- 第二百七十二节,Tornado框架-iframe标签框架伪造ajax
Tornado框架-iframe标签框架伪造ajax html <!DOCTYPE html> <html> <head lang="en"> ...
- 第二百三十七节,Bootstrap图标菜单按钮组件
Bootstrap图标菜单按钮组件 学习要点: 1.小图标组件 2.下拉菜单组件 3.按钮组组件 4.按钮式下拉菜单 本节课我们主要学习一下 Bootstrap 的三个组件功能:小图标组件.下拉菜单组 ...
- 第二百二十七节,jQuery EasyUI,ComboTree(树型下拉框)组件
jQuery EasyUI,ComboTree(树型下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解EasyUI中ComboTree(树型下拉框)组件的使用方法,这个 ...
- 第一百六十七节,jQuery,DOM 节点操作,DOM 节点模型操作
jQuery,DOM 节点操作,DOM 节点模型操作 学习要点: 1.创建节点 2.插入节点 3.包裹节点 4.节点操作 DOM 中有一个非常重要的功能,就是节点模型,也就是 DOM 中的“M”.页面 ...
- 第二百六十七天 how can I 坚持
晚上有点小郁闷,小纠结,感觉不应该买房,不知道什么吸引着我一定要买呢,曾经坚持不买房的我,为什么成了这个样子. 搞不懂啊. 元旦就要就看房了, 如果真的要买了,明年的压力就会很大了. 经济到底会成为啥 ...
随机推荐
- 符号三角形_hdu_2510(深搜).java
http://acm.hdu.edu.cn/showproblem.php?pid=2510 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 取石子 (四)_nyoj_161(博弈-奇异矩阵).java
取石子 (四) 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 4 描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是 ...
- java程序设计题库
选择题 答题要求:单选题,每题只有一个正确答案,选择正确给分,不正确不给分. 1. 下面( A )数据类型可用于main()方法中传递的参数 A.String B.Integer C ...
- android中获取某段程序的执行时间
Date startDate = new Date(System.currentTimeMillis()); 在收到设备返回数据之后添加如下语句: Date endDate = ...
- ubuntu——更新、编译、启动内核
步骤如下: 1.make mrproper Linux下面去编译项目之前,一般常会用make mrproper去先删除之前编译所生成的文件和配置文件,备份文件等,其中,mrproper和distcle ...
- 带有关闭按钮的alertView
概述 由于讨厌系统自带的alertView只能通过点击按钮才能关闭.你说万一按钮区域都是功能性的操作呢(这可不是我胡思乱想哦,要怪就产品的想法吧,呵呵哒),所以我们还是应该备有一个带有“X”(关闭按钮 ...
- 【图像算法】彩色图像切割专题八:基于MeanShift的彩色切割
>原理曾经的博客中已经有对meanshift原理的解释,这里就不啰嗦了.国外的资料看这:http://people.csail.mit.edu/sparis/#cvpr07 >源代码 核心 ...
- cxf利用接口规范写法发布webservice
package cn.itcast.cxf; import javax.jws.WebService; @WebService public interface IHelloService { pub ...
- Solr调优参考
http://rdc.taobao.com/team/jm/archives/1753#nav 共整理三部分,第一部分Solr常规处理,第二部分针对性性处理,前者比较通用,后者有局限性.务必根据具体应 ...
- 最短作业优先(SJF)
1. 最短作业优先: 最短作业优先(SJF)是一种调度任务请求的调度策略.每个任务请求包含有请求时间(即向系统提交的请求的时间)和持续时间(即完成任务所需时间). 当前任务完成后,SJF策略会选择最短 ...