zoukankan      html  css  js  c++  java
  • 第二百六十七节,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 = "
    ".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>

  • 相关阅读:
    Django通用视图执行过程
    Django HTTP处理流程(自我总结)
    CentOS 安装MySQL5.7
    Python--定时给Ta讲笑话
    【转】对Django框架架构和Request/Response处理流程的分析
    Python模块发布
    Django中使用CKEditor代码高亮显示插件Code Snippet
    页面中的"返回顶部"(位置固定,指定位置显示/隐藏) Label:博客园美化
    跨域请求配置 Amazon AWS S3 腾讯云 阿里云 COS OSS 文件桶解决方案以及推荐 Label:Research
    文件分发服务器 AWS CloudFront(CDN)使用入门-以S3为例 Label:Research
  • 原文地址:https://www.cnblogs.com/adc8868/p/6883967.html
Copyright © 2011-2022 走看看