Django框架(12)_模板:功能、模板文件使用、模板语言、继承、反向解析、HTML转义、csrf攻击、反向解析

模板的功能

产生html内容。

模板不仅仅是一个html文件。

模板文件的使用

通常是在视图函数中使用模板产生html内容返回给客户端。

  1. 加载模板文件 loader.get_template
  2. 定义模板上下文 RequeseContext
  3. 模板渲染产生html页面内容 render

模板文件包含两部分内容:

  1. 静态内容:css,js,html。
  2. 动态内容:用于动态去产生一些网页内容。通过模板语言来产生。

模板文件加载顺序:

  1. 首先去配置的模板目录下面去找模板文件。
  2. 去Installed_apps下面的每个应用的去找模板文件,前提是应用中必须有templates文件夹。

模板语言

模板语言简称为DTL。(Django Template Language)

模板变量

格式:{{模板变量名}}

模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头。

模板变量的解析顺序:

例如:{{ book.btitle }}

  1. 首先把book当成一个字典,把btitle当成键名,进行取值book['btitle']
  2. 把book当成一个对象,把btitle当成属性,进行取值book.btitle
  3. 把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle

例如:{{book.0}}

  1. 首先把book当成一个字典,把0当成键名,进行取值book['0']
  2. 把book当成一个列表,把0当成下标,进行取值book[0]

如果解析失败,则产生内容时用空字符串填充模板变量。

模板标签

{% 代码段 %}

for循环:

        {% for x in 列表 %}

        # 列表不为空时执行

        {% empty %}

        # 列表为空时执行

        {% endfor %}

可以通过{{ forloop.counter }}得到for循环遍历到了第几次。

        {% if 条件 %}

        {% elif 条件 %}

        {% else %}

        {% endif %}

关系比较操作符: > , < , >= , <= , == , != 。

注意:进行比较操作时,比较操作符两边必须有空格。

逻辑运算:not and or

过滤器

过滤器用于对模板变量进行操作。

date:改变日期的显示格式。

length:求长度。字符串,列表,元组,字典长度

default:设置模板变量的默认值。

格式:模板变量|过滤器:参数

自定义过滤器

注释

单行注释:{# 注释内容 #}

多行注释:

        {% comment %}

        注释内容

        {% endcomment %}

模板继承

模板继承也是为了重用html页面内容。

在父模板里可以定义块,使用标签:

        {% block 块名 %}

块中间可以写内容,也可以不写

        {% endblock 块名%}

子模板去继承父模板之后,可以重写父模板中的某一块的内容。

继承语法:

        {% extends 父模板文件路径%}

        {% block 块名 %}

        {{ block.super}}  # 获取父模板中块的默认内容

        重写的内容

        {% endblock 块名%}

html转义

在模板上下文中的html标记默认是会被转义的。

        小于号< 转换为<

        大于号> 转换为>

        单引号' 转换为'

        双引号" 转换为 "

        与符号& 转换为 &

要关闭模板上下文字符串的转义:可以使用  {{ 模板变量|safe}}

也可以使用:

        {% autoescape off %}

                模板语言代码

        {% endautoescape %}

模板硬编码中的字符串默认不会经过转义,如果需要转义,那需要手动进行转义。

csrf攻击

  1. 首先做一个登录页,让用户输入用户名和密码进行登录,登录成功之后跳转的修改密码页面。在修改页面输入新密码,点击修改按钮完成密码修改。
  2. 登录页需要一个模板文件login.html.修改密码页面也需要一个模板文件change_password.html.
  3. 显示登录页的视图login,验证登录的视图login_check,显示修改密码页面的视图show_change_password,处理密码修改的视图change_password

加功能:

        a)记住用户是否登录。

        b)只有用户登录之后才可以进行修改操作。

登录装饰器函数。

登录流程图:

django防止csrf的方式:

        1)默认打开csrf中间件。

        2)post提交数据时加上{% csrf_token %}标签。

防御原理:

  1. 渲染模板文件时在页面生成一个名字叫做csrfmiddlewaretoken的隐藏域。
  2. 服务器交给浏览器保存一个名字为csrftoken的cookie信息。
  3. post提交时,两个值都会发给服务器,服务器进行比对,如果一样,则csrf验证通过,否则失败,报403。

验证码

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

反向解析

当某一个url配置的地址发生变化时,页面上使用反向解析生成地址的位置不需要发生变化。

根据url 正则表达式的配置动态的生成url。

在项目urls中包含具体应用的urls文件时指定namespace;

 

在应用的urls中配置是指定name;

在模板文件中使用时,格式如下:

        {% url 'namespace名字:name' %} 例如{% url 'booktest:fan2'%}

带位置参数:

        {% url 'namespace名字:name' 参数 %} 例如{% url 'booktest:fan2' 1%}

带关键字参数:

        {% url 'namespace名字:name' 关键字参数 %} 例如{% url 'booktest:fan2' id=1 %}

在重定向的时候使用反向解析:

        from django.core.urlresolvers import reverse

无参数:

        reverse('namespace名字:name名字')

如果有位置参数

        reverse('namespace名字:name名字', args = 位置参数元组)

如果有关键字参数

        reverse('namespace名字:name名字', kwargs=字典)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轨迹|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值