第二百六十四節,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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM