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-8import tornado.ioloop import tornado.web #导入tornado模块下的web文件 from controllers import indexsettings = { #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-8import 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-8import tornado.ioloop import tornado.web #导入tornado模块下的web文件 from controllers import indexsettings = { #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-8import 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 #将页码等于1if page < 1: #判断页面如果小于1page = 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>