python 网站 模板转义

news/2024/5/6 15:11:22/文章来源:https://blog.csdn.net/weixin_34279184/article/details/89541323

在python的字符串中,有的符号要想表达其本意,需要在前面加上\符号,例如单引号,如果要在字符串中表现它,必须写成\'单引号里面\'样式,才能实现一对单引号以及里面的内容,否则,它就表示字符串了。

在HTML代码中,也有类似的问题,比如>等,就是代码的一部分,如果直接写,就不会显示在网页里,要想显示,同样需要转义。另外,如果在网页中有表单,总会有别有用心的人向表单中写点包含>等字符的东西,目的就是要攻击你的网站,为了防治邪恶之辈,也需要将用户输入的字符进行转义,转化为字符实体,让它不具有HTML代码的含义。

转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。

模板自动转义

Tornado 2 开始的模板具有自动转义的功能,这让开发者省却了不少事情。看一个例子。就利用上一讲中建立的开发框架。要在首页模板中增加一个表单提交功能。

修改template/index.html文件,内容如下:

<DOCTYPE html>
<html><head><title>Loop in template</title><link rel="stylesheet" type="text/css" href="{{ static_url('css/style.css')}}"></head><body><h1>aaaAAA</h1><p>There is a list, it is <b>{{info}}</b></p><p>I will print the elements of this list in order.</p>{% for element in info %}<p>{{element}}</p>{% end %}<br>{% for index,element in enumerate(info) %}<p>info[{{index}}] is {{element}}{% if element == "python" %}<p> <b>I love this language--{{element}}</b></p>{% end %}{% end %}{% if "hiekay@gmail.com" in info %}<p><b>A Ha, this the python lesson of hiekay, It is good! His email is {{info[2]}}</b></p>{% end %}<h2>Next, I set "python-tornado"(a string) to a variable(var)</h2>{% set var="python-tornado" %}<p>Would you like {{var}}?</p><!--增加表单--><form method="post" action="/option"><p>WebSite:<input id="website" name="website" type="text"></p><p><input type="submit" value="ok,submit"></p></form></body>
</html>

在增加的表单中,要将内容以post方法提交到"/option",所以,要在url.py中设置路径,并且要建立相应的类。

然后就在handler目录中建立一个新的文件,命名为optform.py,其内容就是一个类,用来接收index.html中post过来的表单内容。

#!/usr/bin/env python
#coding:utf-8import tornado.webimport sys
reload(sys)
sys.setdefaultencoding('utf-8')class OptionForm(tornado.web.RequestHandler):   def post(self):website = self.get_argument("website")      #接收名称为'website'的表单内容self.render("info.html",web=website)

为了达到接收表单post到上述类中内容的目的,还需要对url.py进行如下改写:

#!/usr/bin/env python
#coding:utf-8import sys
reload(sys)
sys.setdefaultencoding('utf-8')from handler.index import IndexHandler
from handler.optform import OptionForm
url=[(r'/', IndexHandler),(r'/option', OptionForm),]

还要注意,我在新建立的optform.py中,当接收到来自表单内容之后,就用另外一个模板info.html显示所接收到的内容。这个文件放在template目录中,代码是:

<DOCTYPE html>
<html><head><title>Loop in template</title><link rel="stylesheet" type="text/css" href="{{ static_url('css/style.css')}}"></head><body><h1>My Website is:</h1><p>{{web}}</p></body>
</html>

这样我们就完成表单内容的提交和显示过程。

从上面的流程中,是否体验到这个框架的优势了?不用重复敲代码,只需要在框架内的不同地方增加内容,即可完成网站。

演示运行效果:

我在表单中输入了<script>alert('bad script')</script>,这是多么阴险毒辣呀。
image.png

然而我们的tornado是不惧怕这种攻击的,因为它的模板自动转义了。当点击按钮提交内容的时候,就将那些阴险的符号实体化,成为转义之后的符号了。于是就这样了:

image.png

输入什么,就显示什么,不会因为输入的内容含有阴险毒辣的符号而网站无法正常工作。这就是转义的功劳。

不转义的办法

在tornado中,模板实现了自动转义,省却了开发者很多事,但是,事情往往没有十全十美的,这里省事了,一定要在别的地方费事。例如在上面那个info.html文件中,我打算在里面加入我的电子信箱,但是要像下面代码这样,设置一个变量,主要是为了以后修改方便和在其它地方也可以随意使用。

<DOCTYPE html>
<html>...(省略)<body><h1>My Website is:</h1><p>{{web}}</p>{% set email="<a href='mailto:hiekay@gmail.com'>Connect to me</a>"%}<p>{{email}}</p></body>
</html>

本来希望在页面中出现的是Connect to me,点击它之后,就直接连接到发送电子邮件。结果,由于转义,出现的是下面的显示结果:

image.png

实现电子邮件超链接未遂。

这时候,就需要不让模板转义。tornado提供的方法是:

  • 在Application函数实例化的时候,设置参数:autoescape=None。这种方法不推荐使用,因为这样就让全站模板都不转义了,愿意尝试,不妨进行修改试一试,我这里就不展示了。
  • 在每个页面中设置{% autoescape None %},表示这个页面不转义。也不推荐。
  • 以上都不推荐,我推荐的是:{% raw email %},想让哪里不转义,就在那里用这种方式,比如要在email超级链接那里不转移,就写成这样好了。于是修改上面的代码,看结果为:
<DOCTYPE html>
<html><head><title>Loop in template</title><link rel="stylesheet" type="text/css" href="{{ static_url('css/style.css')}}"></head><body><h1>My Website is:</h1><p>{{web}}</p>{%raw email="<a href='mailto:hiekay@gmail.com'>Connect to me</a>"%}</body>
</html>

image.png

如此,实现了不转义。

以上都实现了模板的转义和不转义。

url转义

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用它们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。

在python中,如果用utf-8写了一段地址,如何转义成url能够接收的字符呢?

在python中有一个urllib模块:

>>> import urllib>>> #假设下面的url,是utf-8编码
>>> url_mail='http://www.hiekay.com/email?=hiekay@gmail.com'>>> #转义为url能够接受的
>>> urllib.quote(url_mail)
'http%3A//www.hiekay.com/email%3F%3Dhiekay%40gmail.com'#反过来,一个url也能转移为utf-8编码格式,请用urllib.unquote()>>>urllib.unquote('http%3A//www.hiekay.com/email%3F%3Dhiekay%40gmail.com')
'http://www.hiekay.com/email?=hiekay@gmail.com'

下面抄录帮助文档中的内容,供用到的朋友参考:

quote(s, safe='/')quote('abc def') -> 'abc%20def'Each part of a URL, e.g. the path info, the query, etc., has adifferent set of reserved characters that must be quoted.RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax liststhe following reserved characters.reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |"$" | ","Each of these characters is reserved in some component of a URL,but not necessarily in all of them.By default, the quote function is intended for quoting the pathsection of a URL.  Thus, it will not encode '/'.  This characteris reserved, but in typical usage the quote function is beingcalled on a path where the existing slash characters are used asreserved characters.unquote(s)unquote('abc%20def') -> 'abc def'.quote_plus(s, safe='')Quote the query fragment of a URL; replacing ' ' with '+'unquote_plus(s)unquote('%7e/abc+def') -> '~/abc def'

转义是网站开发中要特别注意的地方,不小心或者忘记了,就会纠结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_804700.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解除Google|Firefox“该网站可能含有恶意软件...”之站点维护|站点管理

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;网站可能含有有害程序……此页面可能试图诱导您安装损害上网体验的程序&#xff0c;例如说修改您的浏览器主页、展示扰人的广告&#xff0c;Firefox已拦截…… 安全信息由Google Safe Browsing提供。&#x…

企业搭建三站合一网站教程

互联网时代快速更迭&#xff0c;企业想要快速抢占互联网、移动互联网、微信端市场&#xff0c;则需要组建一个更加庞大的体系&#xff0c;这其中就搭建一个PC手机微信三站合一的网站。但传统建站系统&#xff0c;三站都是独立分开的&#xff0c;维护起来非常费时费力费神&#…

2017十大流行编程挑战网站

原作者&#xff1a;Daniel Borowski 原文链接&#xff1a; https://medium.freecodecamp.org/the-10-most-popular-coding-challenge-websites-of-2016-fb8a5672d22f 授权翻译&#xff1a;程序媛数据结构翻译组 学习编程时&#xff0c;提高技能的一个好办法是解决编码挑战。完…

建站手册-网站主机:网站主机的类型

ylbtech-建站手册-网站主机&#xff1a;网站主机的类型1.返回顶部 1、http://www.w3school.com.cn/hosting/host_types.asp2、2.返回顶部1、网站主机的类型有&#xff1a;免费主机、虚拟&#xff08;分享的&#xff09;主机或独享主机。 免费主机 一些服务提供商会提供免费的网…

web开发学习网站

https://developer.mozilla.org/zh-CN/ 转载于:https://www.cnblogs.com/twpone/p/9299604.html

中小型网站架构分析及优化

先看网站架构图&#xff1a; 以上网站架构广泛运用中大型网站中&#xff0c;本文从架构每一层分析所用主流技术和解决手段&#xff0c;有助于初入网站运维朋友们&#xff0c;进一步对网站架构认识&#xff0c;从而自己形成一套架构概念。 第一层&#xff1a;CDN 国内网络分布主…

CentOS.NET Core初试-2-安装.NET Core SDK和发布网站

系列目录 CentOS的安装和网卡的配置安装.NET Core SDK和发布网站Nginx的安装和配置安装守护服务(Supervisor)安装.NET Core SDK 注册Microsoft签名密钥 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc 添加Microsoft产品供稿 sudo sh -c echo -e "…

鸿蒙os系统被推送,鸿蒙来了!华为大规模推送鸿蒙OS系统,造成网站一度瘫痪...

千呼万唤始出来&#xff0c;期盼已久的手机鸿蒙OS系统终于迎来了大规模推送&#xff01;今年2月份在华为Mate X2折叠屏手机发布会上&#xff0c;华为就曾表示将在4月份开始大规模推送鸿蒙OS系统&#xff0c;4月27日通过测试申请的用户正式接到升级鸿蒙OS系统的通知&#xff0c;…

HTML5canvas作品网站,HTML5 Canvas

HTML5 Canvas标签定义图形&#xff0c;比如图表和其他图像&#xff0c;您必须使用脚本来绘制图形。在画布上(Canvas)画一个红色矩形&#xff0c;渐变矩形&#xff0c;彩色矩形&#xff0c;和一些彩色的文字。什么是 Canvas?HTML5 元素用于图形的绘制&#xff0c;通过脚本 (通…

html5搭建网站框架,web前端快速搭建网站框架之vue

原标题&#xff1a;web前端快速搭建网站框架之vueVue是web前端快速搭建网站的框架之一。它与jQuery有所不同&#xff0c;是以数据驱动web界面(以操作数据改变页面&#xff0c;而jQuery是以操作节点来改变页面)&#xff0c;同时&#xff0c;vue还实现了数据的双向绑定&#xff0…

咀嚼《大型网站技术架构》-架构初识

为什么要看这本书&#xff1f; 我在一家公司工作了两三年&#xff0c;跟团队着一起开发p2p网站&#xff0c;部分项目是沿用前人留下的“遗产”代码&#xff0c;加以修修补补凑合成的。 随着业务量越来越大&#xff0c;用户量越来越多&#xff0c;老系统必定遇到瓶颈&#xff…

网站的高可用

看了《大型网站技术架构》这本书之后&#xff0c;吸取了其中的精华&#xff0c;对网站的高可用议题进行了一遍梳理。如下将从高可用的思路&#xff0c;衡量标准&#xff0c;实施方案来做总结。 对高可用的理解 一个系统能保证不论有多少并发量&#xff0c;都能够正常提供服务…

网站的服务器256位加密,Windows Server 2008 R2 IIS 7.5开启TLS 1.2和256位加密

一般我们申请下来的证书都是256位加密的&#xff0c;因为2016年开始老版本的证书都会被提示危险网站。首先看一下服务器开启TLS1.2256加密之前和开启之后的区别&#xff1b;开启之前&#xff1a;开启之后&#xff1a;由于Chrome40不再支持SSL 3.0了&#xff0c;GOOGLE认为SSL3.…

网站的 计算机主机作用是什么意思,什么是虚拟主机?有什么作用?

虚拟主机(英语&#xff1a;virtual hosting)或称共享主机(shared web hosting)&#xff0c;又称虚拟服务器&#xff0c;是一种在单一主机或主机群上&#xff0c;实现多网域服务的方法&#xff0c;可以运行多个网站或服务的技术。虚拟主机之间完全独立&#xff0c;并可由用户自行…

delphi select 搜索不到特殊字符_衡阳关键词优化_通过监控品牌词可清楚反应搜索引擎优化情况及网站面临的问题...

发布时间:2020-11-04 11:11:44在做SEO的过程中&#xff0c;实际上很少有运营商会关注企业网站品牌词的变化&#xff0c;甚至有些网站仍然忽视了“品牌词”的概念。为什么SEO员工每天都需要监控品牌词&#xff1f;因为在监测品牌词搜索量的过程中&#xff0c;它清楚地反映了网站…

安卓 fragment内显示网站_如何开发一款以太坊安卓钱包系列3 - 资产信息展示

这是如何开发以太坊&#xff08;安卓&#xff09;钱包系列第3篇&#xff0c; 钱包账号资产信息展示&#xff0c;展示信息主要包括账号地址、eth余额及该账号所拥有的Token及余额。预备知识 MVVM本文会涉及和UI界面的交互&#xff0c;提前理解下界面和数据如何交互是非常有必要的…

常州网站服务器_常州分类信息门户网站定制 常州网站优化效果 常州百度下拉词推广 常州网站建设流程 常州网站建设公司 常州网站定制网站开发价格...

龙腾网络网站制作|网络推广一物一码系统|微信商城制作电话&#xff1a;13292208571(微信)手机上的许多用户都会注意到像素的使用&#xff0c;在分辨率下面往往使整个网页很压制&#xff0c;有种不透气的感觉&#xff0c;其实这个宽度是指在电脑上的宽度&#xff0c;不代表视觉&…

.Net 支付宝电脑网站支付

一、沙箱环境 沙箱环境是一个能让开发者快速开发以及联调的辅助环境&#xff0c;开发者只需要登录支付宝开放平台>进入开发服务>设置秘钥&#xff0c;获取APPID、支付宝网关、支付宝公钥、应用私钥就可以进行业务平台支付功能的开发&#xff0c;无需等待正式环境支付应用…

.Net微信电脑网站支付(api v2)

商户或企业前往微信开放平台申请开通微信支付&#xff0c;需要注意的是微信支付功能不对个人用户开放。开通支付功能后&#xff0c;会获取到以下微信支付相关的配置信息&#xff1a; appid&#xff1a;是微信公众账号或开放平台APP的唯一标识&#xff0c;在公众平台申请公众账…

如何让你的网站排名靠前

网站做好了&#xff0c;怎样才能让你的网站在各大搜索引擎中排名靠前呢&#xff1f;网上的帖子很多&#xff0c;通过搜索和总结&#xff0c;整理出了一套自己行之有效的方法&#xff0c;写出来供大家参考 成功案例推荐&#xff1a;http://sooboo.com.cn/ 还在继续整理中&#…