第二百六十七节,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":"[email protected]"}
]
for f in range(300):
    SHUJU.append({"user": "lgx", "emia": "[email protected]"})   #填充数据到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>

时间: 2024-08-25 17:44:25

第二百六十七节,Tornado框架-分页封装模块的相关文章

第二百六十二节,Tornado框架-cookie

Tornado框架-cookie Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购物数据信息等一系列微小信息. self.set_cookie()方法,创建cookie必写参数,cookie名称和cookie值,后面有可选参数self.get_cookie()方法,获取指定cookie值,必写参数要获取的cookie名称 模板引擎 #!/usr/bin/env python #coding:utf-8 import tornado.ioloop im

第二百三十七节,Bootstrap图标菜单按钮组件

Bootstrap图标菜单按钮组件 学习要点: 1.小图标组件 2.下拉菜单组件 3.按钮组组件 4.按钮式下拉菜单 本节课我们主要学习一下 Bootstrap 的三个组件功能:小图标组件.下拉菜单组件和各 种按钮组件. 一.小图标组件 Bootstrap 提供了免费的 263 个小图标(数了两次),具体可以参考中文官网的组件 链接:http://v3.bootcss.com/components/#glyphicons.

第二百六十七天 how can I 坚持

晚上有点小郁闷,小纠结,感觉不应该买房,不知道什么吸引着我一定要买呢,曾经坚持不买房的我,为什么成了这个样子. 搞不懂啊. 元旦就要就看房了, 如果真的要买了,明年的压力就会很大了. 经济到底会成为啥样,总感觉中国要经历一场危机,危机下如何自保. 其实,也没什么,大不了不要房子了,心放开了,回家种地也一样,哈哈. 睡觉了.

第二百九十七节,python操作redis缓存-List类型,可以理解为列表

python操作redis缓存-List类型,可以理解为列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图:

第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+

第三百三十七节,web爬虫讲解2-PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器异步加载的信息 下载网址:http://phantomjs.org/download.html  下载对应系统版本 下载后解压PhantomJS文件,将解压文件夹,剪切到python安装文件夹 然后将P

第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示

第三百八十七节,Django+Xadmin打造上线标准的在线教育平台-网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件,包括ccs,js,网站样式图片 上传资源是用户操作上传的图片等资源 上传资源的配置 1,首先在项目里创建一个名称叫media的文件夹专门保存用户上传 2,settings.py文件配置上传资源的路径 # 上传资源路径,如果图片,上传文件等 MEDIA_URL = '/media/' # 设置上传资源

第三百六十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—倒排索引

第三百六十一节,Python分布式爬虫打造搜索引擎Scrapy精讲-倒排索引 倒排索引 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index).带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file). 倒排索引原理 就是将一句话进行分词并记录分词所存在的文章,当用户搜索词时可以直接查找到当前词所存在的文

第三百九十七节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,主题本地化设置

第三百九十七节,Django+Xadmin打造上线标准的在线教育平台-其他插件使用说,主题本地化设置 主题设置是在xadmin\plugins\themes.py这个文件 默认xadmin是通过下面这个json文件来动态加载的.所以我们可以到它加载的json文件里下载好主题 themes.py修改方式 #coding:utf-8 from __future__ import print_function import httplib2 from django.template import lo

第二百六十三也,Tornado框架-基于正则的动态路由映射分页

Tornado框架-基于正则的动态路由映射分页 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", index.indexHandler),正则匹配访问路径,访问录index/后面可以是可以是0个或多个数字第二步.配置逻辑处理方法,get()方法里显示对应的页面,并传值一个SHUJU全局变量列表到html模板,这个全局变量列表里是字典显示的数据第三步.在html模板里用模板语言,循环这个列表里的字典,显示到表格里第四步.设置用