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>