Tornado框架-XSS处理,页码计算,页码显示

Tornado框架-XSS攻击过滤

注意:Tornado框架的模板语言,读取数据已经自动处理了XSS攻击,过滤转换了危险字符

如果要使危险字符可以远行,就需要在模板语言接收数据的地方{% raw 接收数据变量 %}

raw写在模板语言里,用{% raw 接收变量%},让接收到的数据如果有html标签等进行原始显示,也就是可以运行,分页会用到

框架引擎

#!/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>{% raw i["emia"] %}</td></tr>{% end %}</tbody>
</table>
</body>
</html>

计算页码
第一步、数据总量除以显示条数,取余,两个变量接收,第一个变量得到相除后的整数,后一个变量得到相除后的余数(小数)
  1、判断余数如果大于0,页面数等于整数加1,等于分页总量
第二步、定义一个列表接收分页数据
  1、根据分页总量循环次数
  2、判断循环到的页码等于当前页面,格式化当前页码设置样式
  3、否则格式化当前页码,将格式化的页码数据追加到列表
  4、将列表连接长一串字符串
  5、将字符串传递到html模板
第三步、在html模板接收传递过来的字符串

模板引擎

#!/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"}
]
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方式请求#接收路由映射正则名称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]              #通过起始和结束位置以下标方式获取指定范围的列表数据#计算页码显示zyema,c = divmod(len(SHUJU),5)              #数据总量除以显示条数,取余,两个变量接收,第一个变量得到相除后的整数,后一个变量得到相除后的余数(小数)if c > 0:                                   #判断余数如果大于0,zyema += 1                              #页面数等于整数加1,等于分页总量
yema = []                                   #定义一个列表接收分页数据for i in range(zyema):                      #根据分页总量循环次数if i+1 == page:                         #判断循环到的页码等于当前页面temp = '<li class="yem"><a href="/index/%s">%s</a></li>' % (i+1,i+1)    #格式化当前页码设置样式else:temp = '<li><a href="/index/%s">%s</a></li>' % (i + 1, i + 1)           #格式化当前页码yema.append(temp)                                                           #将格式化的页码数据追加到列表zfpage = "".join(yema)                                                      #将列表连接长一串字符串
self.render("index.html",shuju = xianshi,yema = page,zfpage = zfpage)   #显示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>{% raw i["emia"] %}</td></tr>{% end %}</tbody>
</table>
<ul class="fy">{% raw zfpage %}
</ul>
</body>
</html>

页码显示

计算每页显示多少个页码
假设每页显示11个页码,当前页的前5个和后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"}
]
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方式请求#接收路由映射正则名称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]              #通过起始和结束位置以下标方式获取指定范围的列表数据#计算页码显示zyema,c = divmod(len(SHUJU),5)              #数据总量除以显示条数,取余,两个变量接收,第一个变量得到相除后的整数,后一个变量得到相除后的余数(小数)if c > 0:                                   #判断余数如果大于0,zyema += 1                              #页面数等于整数加1,等于分页总量
yema = []                                   #定义一个列表接收分页数据#计算每页显示多少个页码#假设每页显示11个页码,当前页的前5个和后5个#所以需要动态调整循环里的值if zyema < 11:                      #判断总页码小于11s = 1                           #起始页码为1t = zyema                       #结束页码为总页码else:if page <= 6:                   #判断当前页码小于等于6s = 1                       #起始页码为1t = 11                      #结束页码为11else:if (page + 5) > zyema:      #判断当前页加5如果大于总页数s = zyema - 10          #起始页为总页数减以10t = zyema               #结束页为总页数else:s = page - 5            #起始页为当前页减以5t = page + 5            #结束页为当前页加5for i in range(s,t+1):                      #根据分页总量循环次数if i == page:                         #判断循环到的页码等于当前页面temp = '<li class="yem"><a href="/index/%s">%s</a></li>' % (i,i)    #格式化当前页码设置样式else:temp = '<li><a href="/index/%s">%s</a></li>' % (i, i)           #格式化当前页码yema.append(temp)                                                           #将格式化的页码数据追加到列表zfpage = "".join(yema)                                                      #将列表连接长一串字符串
self.render("index.html",shuju = xianshi,yema = page,zfpage = zfpage)   #显示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>{% raw i["emia"] %}</td></tr>{% end %}</tbody>
</table>
<ul class="fy">{% raw zfpage %}
</ul>
</body>
</html>

 

第二百六十六节,Tornado框架-XSS处理,页码计算,页码显示相关推荐

  1. 第二百七十五节,MySQL数据库安装和介绍

    MySQL数据库安装 一.概述 1.什么是数据库 ? 答:数据的仓库,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 答:他们均是一种 ...

  2. 第二百七十九节,MySQL数据库-pymysql模块操作数据库

    MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数 使用方式: 模块名称.conne ...

  3. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

  4. 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url

    第三百二十六节,web爬虫,scrapy模块,解决重复url--自动递归url 一般抓取过的url不重复抓取,那么就需要记录url,判断当前URL如果在记录里说明已经抓取过了,如果不存在说明没抓取过 ...

  5. 第二章 第十六节:字典的循环嵌套

    Python基础入门(全套保姆级教程) 第二章 第十六节:字典的循环嵌套 字典的循环 直接看图看代码 dic = {"赵四": "特别能歪嘴","刘能 ...

  6. 第一卷 第一百三十六章 好白菜

    第一卷 第一百三十六章 好白菜 其实我最恨两种人,一种是始乱终弃的小白脸,一种就是生孩子不养活的臭娘们儿.**  提供本书txt电子书下载 **既然你能生就要能养啊,虽然我不知道井里的那个死孩子的母亲 ...

  7. 第三百三十六章 斗宗强者间的大战!

    第三百三十六章 斗宗强者间的大战! <script language="javascript" src="/js/style2.js"></s ...

  8. 第二章第十六题(几何:六边形面积)(Geometry: area of a hexagon)

    第二章第十六题(几何:六边形面积)(Geometry: area of a hexagon) 2.16(几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积.计算六边形面积的公式是: ...

  9. 美学心得(第二百二十九集)罗国正

    美学心得(第二百二十九集) 罗国正 (2021年10月) 2999.清朝鉴赏家陆时化,字润之,号听松,是江苏太仓人.他的美学思想,非常值得大家关注.研究.现将他的观点摘要如下: 1.他强调先天文化之根 ...

最新文章

  1. 医学+数据科学,必将大有可为 | 清华生物医学影像研究中心赵锡海
  2. Yii 框架调试之CWebLogRoute
  3. 006_logback体系结构
  4. 分页缓冲池如何关闭_线程池没你想的那么简单
  5. 使用键值flyweight的Boost.Flyweight示例
  6. 从源代码学Python系列目录
  7. c语言报错spawning 插1,C语言错误····error spawning c1.exe
  8. Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
  9. (一)netty介绍
  10. 基于JAVA+Servlet+JSP+MYSQL的毕业生离校管理系统
  11. [码海拾贝 之JS] JS 之删除数组中的元素
  12. 安装PaddleOCR遇到ERROR: Command errored out with exit status 1:command: ‘f:\python3.7\python.exe‘ -u -c
  13. 电脑qq浏览器怎么滚动截长图_电脑上如何滚动截屏长图?这样做最简单
  14. Python数据处理二
  15. KOC十问:品牌缺钱的谎言,还是新瓶装旧酒?
  16. rrpp协议如何修改_产品技术-RRPP技术介绍-新华三集团-H3C
  17. 为了追学姐,用python把她的照片做成了游戏,她看了...
  18. 地形因子分类整合方案
  19. 怎样将wmv格式的视频转换成mp4格式
  20. 视觉感知特性 【1】人类视觉系统的信息处理机制的4个特性

热门文章

  1. 白鹭时代与html5关系,白鹭时代观点:HTML5行业将进入红利收割期
  2. HTML5视频教程详细开发介绍
  3. Java(Servlet)模糊查询
  4. android 测试版命名,UI和OS傻傻分不清楚,安卓定制ROM能取个好名字吗?
  5. arduino编乐谱_把乐谱播出来,自制简谱播放库
  6. 巨头争锋,网络摄像头究竟是个怎样的市场?
  7. 【嵌入式学习——知识点总结】面试题汇总(1)
  8. tkmybatis通用mapper实现在使用Example进行查询的几种方式
  9. c语言 宏 不定参数,C宏定义不定参数
  10. bandizip修改压缩文件内容_如何修改压缩文件的编码?