一、HTML转义

  在视图中,通过调用模板传递下文,模板对上下文的传递字符串进行输出时,会对以下字符自动转义。HTML转义的作用:转义后标记代码不会被直接解释执行,而是被直接呈现,防止客户端通过嵌入js代码攻击网站。

小于号 < 转换为 &lt;

大于号 > 转换为 &gt;

单引号 ' 转换为 '

双引号 " 转换为 &quot;

与符号 & 转换为 &amp;

HTML转义演示:

匹配URL:

 path('zhuanyi/', views.zhuanyi),

视图:

def zhuanyi(request):
content = {"text":"<h1>标题一</h1>"}
#调用模板传入HTML字符串
return render(request,"Book/zhuanyi.html",content)

模板:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>转义演示</title>
</head>
<body>
<p>{{ text }}</p>
</body>
</html>

结果:

我们在视图传入的HTML标签没有被浏览器执行,就是为了防止js攻击。在模板渲染的时候进行了转义,这样浏览器就不会认出来是专属的标签啦。

禁止HTML转义

{{变量|escape}}

过滤器escape可以实现对变量的HTML转义,默认模板就会转义,一般省略。

{{变量|safe}}

过滤器safe:禁用转义,告诉模板这个变量是安全的,可以解释执行。

{% autoescape off %}
.......
{% endautoescape %}

标签autoescape:设置一段代码都禁用转义,接收on、off参数(on:启用转义,off:禁用转义)

代码展示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>禁止转义演示</title>
</head>
<body>
{#默认会进行HTML转义#}
<p style="background: red">{{ text }}</p>
<p>{{ text|safe }}</p>
</body>
</html>

其他备注信息:

  1、对于在模板中硬编码 < > ' " & 不会被转义

  2、在模板中硬编码如果希望出现转义的效果,则需要手动编码转义

二、CSRF

  CSRF全拼为Cross Site Request Forgery,翻译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你的名义发送邮件,发消息,盗取你的账号,甚至购买商品,虚拟货币转账.............造成的问题就是,个人隐私泄露以及财产安全。

  CSRF攻击原理

客户端访问服务器的时候,服务器没有做验证。因此就会出现伪造用户访问。

  防止CSRF攻击

Django默认开启了CSRF安全验证功能:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#默认开启CSRF验证
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

现在你在模板中用form表单提交数据(或者直接手动提交自己组键值),提交数据就会返回的页面是Forbidden(403)。CSRF verification failed.Request aborted。等信息,因此需要在form表单内添加CSRF验证语法:

<form>
{#生成csrftoken进行安全验证,可以在表单内的任意位置#}
{% csrf_token %} </form>

如果不是在表单内,需要自己组成键值对提交进行post。表单内是表单自动组织键值对。

总结Django提供的CSRF防护机制:

.Django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,这样就能避免被 CSRF 攻击。

.在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token

.在所有的 POST 表单时,必须包含一个 csrfmiddlewaretoken 字段 (只需要在模板里加一个 csrf_token标签, django 就会自动帮我们生成)

.在处理 POST 请求之前,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提 交的表单里的 csrfmiddlewaretoken 字段的值是否一样。
如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden.

三、验证码

  在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻服务器、数据库压力。网上有很多验证码的教程以及库,方法等。

  服务器随机生成验证码,字符串存入session中,让客户输入然后在视图函数中调用数据库中的判断是否一致。

四、反向解析

  有时候我们的url是不断变化的,有一个办法就是url变化,但我还是想得到我要的网页,那么重定向就是解决这个事情的。

  并且越来越多的视图,会出现以前的视图匹配不想要,需要改动,但改动是很麻烦的。因此反向解析能够很好地解决这些问题。

  反向解析应用:模板中的超链接,视图中的重定向

urls.py:(加上一个名字)

   path('booklist/', views.bookList,name="index"),

   path('fan/', views.fan,),
#  views.py
def fan(request):
return render(request,"Book/fan.html")

模板中动态生成地址:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>反向解析</title>
</head>
<body>
{#反向解析超链接,前面关键字url空格加上#}
<a href="{% url "index" %}">跳转到index页面</a>
</body>
</html>

跳转的页面如下所示

 反向解析--视图(重定向)

#反向解析
def fan(request):
return redirect(reverse("index"))

 反向解析--正则中取参数(位置参数)

  re_path("^fan1/(\d+)/(\d+)/$",views.index,name=fan1),
  # 反向解析:向正则中传参
def fan1(request, v1, v2):
str = '%s--%s'%(v1,v2)
return HttpResponse(str)
{# 向正则中传参 #}
<a href="{% url 'fan1' 188 5415 %}">动态地址和正则传参跳转到fan1</a>

关键字参数

  re_path("^(?P<number1>\d+)/(?P<number2>\d+)/$",views.index),

08-Django模板(2)的更多相关文章

  1. Django模板语言相关内容

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...

  2. Django 模板系统

    Django模板系统 常用语法 {{}} 变量相关 {%%} 逻辑相关 变量 格式 {{ 变量名 }} 命名规则 包括任何字母数字以及下划线 ("_")的组合 变量名称中不能有空格 ...

  3. Django模板语言与视图(view)

    常用语法 {{  }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...

  4. Django模板语言(一)

    1,Django模板语言 1.1>基础语法:1.1.1,变量相关:{{ 变量名 }},1.1.2,逻辑相关{% ... %} 在Django模板语言中按此语法使用:{{ 变量名 }},当模板引擎 ...

  5. Django模板与Vue.js冲突问题

    参考: https://my.oschina.net/soarwilldo/blog/755984 方法1:修改vue.js的默认的绑定符号 Vue.config.delimiters = [&quo ...

  6. 在 Django 模板中遍历复杂数据结构的关键是句点字符

    在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...

  7. python django 模板

    1 用两个大括号括起来的文字{{person_name}} 称为变量 2 被 大括号和面分号包围的文件({% if ordered_warranty %})是模板标签 3 过滤器是用管道符(|) 和U ...

  8. django 模板中定义临时列表

    <ul class="num_t clr"> {% for obj in ""|ljust:"10" %} <li> ...

  9. Django 模板中引用静态资源(js,css等)

    Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1. ...

  10. Django模板-分离的模板

    上一篇Django模板-在视图中使用模板最后的问题,我们需要把数据和展现分离开. 你可能首先考虑把模板保存在文件系统的某个位置并用 Python 内建的文件操作函数来读取文件内容. 假设文件保存在 E ...

随机推荐

  1. 常用的git和repo命令

    首先下图是git的流程图 相关概念 svn与git命令的对比 git常用命令 git log // 查看当前库的git log信息 git status ./ // 查看当前库的状态 git diff ...

  2. Object::connect: No such slot xxx 解决方法

    在所有代码和槽函数全部写好之后,进行编译时竟然报 No such slot xxxx,奇怪 Starting E:\01_project\03_C++\key\debug\key.exe... Obj ...

  3. 截取字符串substr和substring两者的区别

    两者有相同点: 如果只是写一个参数,两者的作用都是一样的:就是截取字符串当前下标以后直到字符串最后的字符串片段. 不同点:第二个参数: substr(startIndex,lenth): 第二个参数是 ...

  4. Ubuntu18.04 设置开机进入命令行模式

    首先来了解下启动级别(Runlevel): 指 Unix 或 类 Unix 操作系统下不同的运行模式,运行级别通常分为 7 级: 运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启 ...

  5. centos7编译安装Zabbix-4.2.4及设置邮件告警教程(超详细每步都有截图)

    Zabbix-4.2.4安装及配置 此安装基于centos7的LNMP环境下,如未安装LNMP还可参考本人其他随笔 第一步:上传下载 1.前往https://www.zabbix.com/downlo ...

  6. Ubuntu设置开机时启动的系统内核版本

    1.查看系统当前安装的所有内核版本 有两种方法 第一种: 可以查看/lib/modules下的文件夹,一个文件夹对应一个内核版本,如下图: 第二种:使用下面的命令查看: dpkg --get-sele ...

  7. netty源码解析(4.0)-27 ByteBuf内存池:PoolArena-PoolThreadCache

    前面两章分析的PoolChunk和PoolSubpage,从功能上来说已经可以直接拿来用了.但直接使用这个两个类管理内存在高频分配/释放内存场景下会有性能问题,PoolChunk分配内存时算法复杂度最 ...

  8. [Spring cloud 一步步实现广告系统] 8. 检索系统配置&依赖

    工作流程 项目依赖 <dependencies> <!-- hystrix 监控面板 --> <dependency> <groupId>org.spr ...

  9. 在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)

    研究如何使用Markdown你们可能要花好几天才能搞定,但是看我的文章或者下载了源码,你搞定一般在10分钟之内.我先给各位介绍下它: Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯 ...

  10. 利用Python制作一个只属于和她的聊天器,再也不用担心隐私泄露啦!

    ------------恢复内容开始------------ 是否担心微信的数据流会被监视?是否担心你和ta聊天的小秘密会被保存到某个数据库里?没关系,现在我们可以用Python做一个只属于你和ta的 ...