python类的编写模板_Python教程:十分钟入门Django模板

模板

模板注释

单行注释:

{# 注释内容 #}

多行注释:

注意,模板注释和html注释不同,html注释后浏览器检查还能看到朱时候的代码,但模板注释不能被看到。

模板的功能

产生html,控制页面上展示的内容。模板文件不仅仅是一个html文件。

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

1)静态内容:css,js,html。

2)动态内容:用于动态去产生一些网页内容。通过模板语言来产生。

模板文件的使用

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

a)加载模板文件 loader.get_template

获取模板文件的内容,产生一个模板对象。

b)定义模板上下文 RequeseContext

给模板文件传递数据。

c)模板渲染产生html页面内容 render

用传递的数据替换相应的变量,产生一个替换后的标准的html内容。

不用render自己渲染模板示例/ 给一个函数使用templates模板

自定义render渲染模板示例/ 抽离出templates渲染函数给多个视图函数使用

模板文件加载顺序

1)首先去配置的模板目录下面去找模板文件。

2)去INSTALLED_APPS下面的每个应用的templates去找模板文件,前提是应用中必须有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]

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

使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。

使用模板变量示例

模板变量函数

模板变量html代码(booktest/temp_var.html)

模板标签

模板标签使用格式:

{% 代码段 %}

for循环:

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

if判断:

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

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

逻辑运算:not and or

django内置标签与过滤器文档:内置标签与过滤器文档 或者 https://yiyibooks.cn/xx/django_182/ref/templates/builtins.html

模板标签使用示例

函数

html代码

过滤器

过滤器其实就是python函数。

过滤器用于对模板变量进行操作。date:改变日期的显示格式。

length:求长度。字符串,列表.

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

格式:

模板变量|过滤器:参数

自定义过滤器。

自定义的过滤器函数,至少有一个参数,最多两个

过滤器的使用示例

过滤器函数

过滤器html代码

注意:过滤器中,冒号后不能加空格,

例如{{ book.bpub_date|date:'Y-m-d' }}是正确的,而{{ book.bpub_date|date: 'Y-m-d' }}是错误的。

否则会报错,Could not parse the remainder: ': 'Y-m-d'' from 'book.bpub_date|date: 'Y-m-d''

自定义过滤器

自定义过滤器1.在自己的应用下面新建一个 templatetags 文件夹,名字固定;

2.在templatetags文件夹下面新建一个py文件,名字自定义,比如filters.py;

3.1.在文件中,引入Library类;

3.2.创建一个Library类的对象;

3.3.定义自己的函数,给函数添加装饰器@register.filter进行过滤器装饰;

使用自定义装饰器1.在需要使用的html文件中导入自定义装饰器文件,{% load filters %},即 load 文件名;

2.使用过滤器;

自定义过滤器示例

在html代码中使用模板过滤器

两个参数的自定义过滤器

自定义过滤器

html代码

模板继承

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

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

{% block 块名 %}   块中间可以写内容,也可以不写 {% endblock 块名%}

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

继承格式:

模板继承示例

base/母模板

child/子模板

配套函数

在块里面还可以写块,需要注意endblock后面跟 块名 用以区分哪个块结束。

html转义

场景:编辑商品详情信息,数据表中保存的是html内容。

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

要关闭模板上下文字符串的转义:可以使用

也可以使用:

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

safe和autoescape的区别在于,safe只能转义一个模板变量,而autoescape可以转义多个变量;

html转义示例

html_escape.html

配套函数

验证码

在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,

如果验证码错误,则不需要继续处理,可以减轻业务服务器、数据库服务器的压力。

自实现验证码

安装pillow

pip install Pillow==3.4.1

编写函数/视图

查看验证码

在网页中使用验证码

登录校验验证码函数

url反向解析

当某一个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=字典)

url反向解析示例

项目下的url文件

应用下的url文件

模板中使用url反向解析

配套函数

视图中使用反向解析

反向解析函数

csrf攻击

首先做一个登录页,让用户输入用户名和密码进行登录,登录成功之后跳转的修改密码页面。在修改密码页面输入新密码,点击确认按钮完成密码修改。

登录页需要一个模板文件login.html.修改密码页面也需要一个模板文件change_pwd.html.

显示登录页的视图login,验证登录的视图login_check,显示发帖页的视图change_pwd,处理修改密码的视图change_pwd_action.

加功能:

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

登录装饰器函数。

案例流程图:

django防止csrf的方式:1) 默认打开csrf中间件。

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

防御原理:1)渲染模板文件时在页面生成一个名字叫做csrfmiddlewaretoken的隐藏域。

2)服务器交给浏览器保存一个名字为csrftoken的cookie信息。

3)提交表单时,两个值都会发给服务器,服务器进行比对,如果一样,则csrf验证通过,否则失败。

登录案例代码

设计路由

编写login.html页面

编写login函数

编写

编写change_pwd.html页面

编写登录判断装饰器

定义change_pwd函数

定义change_pwd_action函数

csrf伪造

django默认开启csrf防护,并且只针对post提交;1.开启csrf防护,把注释的settings文件里面的csrf放开注释;

2.在要提交表单的地方,添加{% csrf_token %}

csrf防护示例代码

login页面

change_pwd页面

在模拟的时候,自制的第三方网站,可以拿到自己页面的csrftoken隐藏域的信息,然后放到自己的第三方网站代码去;

但在实际上,这样很难实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值