• 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算


    Tornado框架-基于正则的动态路由映射分页数据获取计算

    分页基本显示数据

    第一步、设置正则路由映射配置,(r"/index/(?P<page>d*)", index.indexHandler),正则匹配访问路径,访问录index/后面可以是可以是0个或多个数字
    第二步、配置逻辑处理方法,get()方法里显示对应的页面,并传值一个SHUJU全局变量列表到html模板,这个全局变量列表里是字典显示的数据
    第三步、在html模板里用模板语言,循环这个列表里的字典,显示到表格里
    第四步、设置用户表单提交数据,表单以post方式提交,提交到/index/1,也就是第1也
    第五步、逻辑处理post()方法接收用户提交的数据,组合成字典追加到SHUJU全局变量列表里,self.redirect("/index/1")跳转到第一页,显示出添加的数据

    框架引擎

    #!/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()

    逻辑处理

    #!/usr/bin/env python
    #coding:utf-8
    
    import tornado.ioloop
    import tornado.web                              #导入tornado模块下的web文件
    SHUJU = [
        {"user":"lgx","emia":"729088188@qq.com"}
    ]
    
    #逻辑处理
    
    class indexHandler(tornado.web.RequestHandler):  #定义一个类,继承tornado.web下的RequestHandler类
        def get(self,page):                                              #get()方法,接收get方式请求
    
            self.render("index.html",shuju = SHUJU)                               #显示index.html文件,并将全局变量SHUJU传到html模板
    
        def post(self, *args, **kwargs):
            user = self.get_argument("user")            #接收用户提交的用户名
            emia = self.get_argument("emia")            #接收用户提交的邮箱
            temp = {"user":user,"emia":emia}            #将邮箱和用户名组合成字典,
            SHUJU.append(temp)                          #将字典追加到SHUJU全局变量
            self.redirect("/index/1")                   #跳转到index/1,第一页

    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/1">
        用户名:<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>
    </body>
    </html>

    说明:get方式请求post方法请求

    分页根据页码获取相应范围的数据

    第一步、在get方法里获取路由映射正则名称page,也就是访问后缀也是页码

    第二步、根据页码获取相应范围的数据
      1、假如每页显示5条信息,page就是当前页
      2、第一页就应该获取SHUJU全局变量里的0-5条
      3、第二页就应该获取SHUJU全局变量里的5-10条
      4、换算页码获取数据范围的公式
      5、当前页码减去1乘以显示条数=当前页获取数据的起始条数,也就是从第几条开始获取
      6、当前页码乘以显示条数=当前页获取数据的结束条数,也就是从第几条结束获取
      7、通过起始和结束位置以下标方式获取指定范围的数据传入模板

    第三步、对页码进行判断,保证页码是有效的
      1、接收到的页码是字符串,需要转换成数字
      2、如果转换出错,将页码设置成1
      3、如果页码小于1,将页面设置成1

      4、在逻辑处理的get方法里将接收的页码传到html模板,在post方法将接收到的页码写在跳转路由映射
      5、在表单发送链接里用模板语言接收页码

    框架引擎

    #!/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()

    逻辑处理

    #!/usr/bin/env python
    #coding:utf-8
    
    import tornado.ioloop
    import tornado.web                              #导入tornado模块下的web文件
    SHUJU = [
        {"user":"lgx","emia":"729088188@qq.com"}
    ]
    
    #逻辑处理
    
    class indexHandler(tornado.web.RequestHandler):  #定义一个类,继承tornado.web下的RequestHandler类
        def get(self,page):                                              #get()方法,接收get方式请求
            #接收路由映射正则名称page,也就是用户访问的后缀,也就是访问的页码
            #假如每页显示5条信息,page就是当前页
            #第一页就应该获取SHUJU全局变量里的0-5条
            #第二页就应该获取SHUJU全局变量里的5-10条
    
            #换算页码获取数据范围的公式
            #当前页码减去1乘以显示条数=当前页获取数据的起始条数,也就是从第几条开始获取
            #当前页码乘以显示条数=当前页获取数据的结束条数,也就是从第几条结束获取
    
            try:                                        #尝试执行
                page = int(page)                        #将页码转换成数字类型
            except:                                     #如果出错
                page = 1                                #将页码等于1
            if page < 1:                                #判断页面如果小于1
                page = 1                                #页码等于1
    
            kaishi = (page - 1) * 5                     #当前页码获取数据起始位置
            jieshu = page * 5                           #当前页码获取数据结束位置
            xianshi = SHUJU[kaishi:jieshu]              #通过起始和结束位置以下标方式获取指定范围的列表数据
    
            self.render("index.html",shuju = xianshi,yema = page)   #显示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/{{yema}}">
        用户名:<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>
    </body>
    </html>
  • 相关阅读:
    pip install selenium==版本号 报错
    解决phantomjs输出中文乱码
    phantomjs学习之网页访问测速
    phantomjs学习之截图
    bzoj1069-最大土地面积
    hdu4372-Count the Buildings
    bzoj3786-星系探索
    Codeforces633H-Fibonacci-ish II
    hdu3625-Rooms
    斯特林数
  • 原文地址:https://www.cnblogs.com/adc8868/p/6869371.html
Copyright © 2020-2023  润新知