一、模板

组成

HTML代码

动态插入的代码(挖坑、填坑逻辑控制代码)

作用

快速生成HTML页面

优点

模板的设计实现了业务逻辑与现实内容的分离

视图可以使用任何模板

模板处理

加载

渲染

二、模板使用

变量

- 从视图函数中传递到模板

{{ var }}

{{ 变量 }}

变量不存在,则插入空的字符串

标签

逻辑处理

使用:

{% tag %}

- 标签if

{% if 条件 %}

代码区块

{% endif %}

{% if 条件 %}

代码区块1

{% else %}

代码区块2

{% endif %}

{% if 条件 %}

代码区块1

{% elseif %}

代码区块2

{% else %}

代码区块3

{% endif %}

标签for - in

{% for 变量 in 列表%}

代码区块

{% endfor %}

#循环的当前次数(从1开始)

{{ forloop.counter }}

#循环的当前次数(从0开始)

{{ forloop.counter0 }}

#循环的当前次数(逆序显示)

{{ forloop.revcounter }}

单行注释

{# 注释内容 #}

模板中的注释,如果HTML注释:\

多行注释

{% comment %}

注释区块

{% endcomment %}

标签 ifequal 和 finotequal

{{% ifequal 条件1 条件2%}}

代码区块

{{% endifequal %}}

{{% ifnotequal 条件1 条件2%}}

代码区块

{{% endifnotequal %}}

过滤器

{{ var|过滤条件}}

过滤条件:lower\upper\join:''\default:' '\...

标签include

加载模板(带参数渲染)

{% include '模板位置' with 参数1 参数2 参数3..... %}

exp:{% include 'index_context.html'%}

四、反向解析

基本语法

{% url 'namespace:name' p1 p2.....%}

name: url添加一个别名(不同应用中,可能会出现重名)

namespace:命名空间

五、模板继承

作用

提高页面的代码复用(提取共有部分,作为基类)

block标签

- 挖坑和填坑的过程

# 挖坑

{% block 标签名%}

{% endblock 标签名 %}

# 填坑

{% block 标签名%}

代码区块

{% endblock 标签名 %}

extends标签

{% extends 'home.html' %}

六、HTML转义

return render(request,'cart.html',content={'code':

购物车

})

#默认会转义:当前普通字符串

{{code}}

#方式一:过滤

{{ code|safe }}

#方式二:关闭自定义转义

{% autoescape off%}

{{ code }}

{% endautoescape %}

七、生成验证码

导包

# 安装pillow : pip install pillow

from PIL import Image, ImageDraw, ImageFont

实现代码

def verifycode(request):

bgcolor = (random.randint(0,255)),random.randint(0,255),random.randint(0,255)

width = 100

height = 50

#创建图片

image = Image.new('RGB',(width,height),bgcolor)

#创建画笔对象

draw = ImageDraw.Draw(image)

# 绘制噪点

for i in range(0,1000):

xy = (random.randrange(0,width),random.randrange(0,height))

fill = random.randrange(0,255),random.randrange(0,255),random.randrange(0,255)

draw.point(xy,fill=fill)

# 定义验证码的备选值

str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'

# 随机选取四个值作为验证码

rand_str = ''

for i in range(0,4):

rand_str += str[random.randrange(0,len(str))]

#构建字体对象

font =ImageFont.truetype('static/fonts/Songti.ttc',40)

#构建字体颜色

fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))

fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))

fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))

fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))

#绘制四个字

draw.text((5,1),rand_str[0],font=font,fill=fontcolor1)

draw.text((25,1),rand_str[1],font=font,fill=fontcolor2)

draw.text((45,1),rand_str[2],font=font,fill=fontcolor3)

draw.text((75,1),rand_str[3],font=font,fill=fontcolor4)

# 释放画笔

del draw

# 存入session,用于验证

request.session['verify'] = rand_str

buff = io.BytesIO()

image.save(buff,'png')

return HttpResponse(buff.getvalue(),'image/png')

备注: code1 = request.session['verify'] 【登录获取图片上的验证码】 code2 = request.POST.get('verifycode') 【获取登录表单上输入的验证码】

验证方式二 html标签验证码,Django标签、转义及验证码生成相关推荐

  1. 分析|拥有11种验证方式的顶象无感验证,不仅省钱,还省时

    验证码"作为人机交互界面经常出现的元素,其本质是为了防止用户利用机器人程序自动注册.登录.恶意投票.发送垃圾邮件.恶意尝试密码等登陆尝试,保证网络安全." 据统计,全球所有人每天需 ...

  2. python 全栈开发,Day46(列表标签,表格标签,表单标签,css的引入方式,css选择器)

    一.列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: ul:unordered list,"无序列表"的 ...

  3. python全栈开发 * 表格标签 表单标签 css 引入方式 * 180807

    html部分 一.表格标签<table> 1.一个表格<table>由每行<tr>组成的,每行是由<td>组成的. 注意: 一个表格是由行组成的(行是由 ...

  4. Day46(列表标签,表格标签,表单标签,css的引入方式,css选择器)

    一.列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: ul:unordered list,"无序列表"的 ...

  5. 前端之body标签中相关标签(二)

    一 列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: a.ul:unordered list,"无序列表" ...

  6. javaweb学习总结(二十六)——jsp简单标签标签库开发(二)

    一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...

  7. javaweb学习总结(二十五)——jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  8. 电子防盗标签 之二:声磁软标签 《转》

    转自:拆解声磁软标签(超市电子防盗标签),顺便恶补一下工作原理| http://bbs.mydigit.cn/read.php?tid=2142954 电子防盗标签 之二:声磁软标签 电子防盗标签属于 ...

  9. 烦人的谷歌验证码被破解怎么办?下一代隐藏验证方式现身

    谷歌弃用形同虚设的图片验证码,新昕科技推出无感解决方案 2016年2月,谷歌Google宣布即将停止全球图片验证码服务,这个困扰我们多年的验证码终于要退出历史的舞台了.官方宣告可以看以下截图: 想必验 ...

最新文章

  1. 为什么要使用Go语言?Go语言的优势在哪里?
  2. vs code中文乱码解决方法
  3. (chap1 网络基础知识)一些概念
  4. Java(21)_ ^、|、运算符
  5. 取 Oracle Schema信息
  6. C++中的STL--结构概览
  7. 【并查集+dp】Team
  8. 如何优雅地编写Java
  9. docker安装chirpstack_用docker-compose快速部署ChirpStack
  10. 迎接2019多校联合新生训练赛(2018/12/31)
  11. python命令行参数作用_python中命令行参数和os模块常用函数
  12. python源码打包成exe、exe反编译、pyd加密防止反编译
  13. linux网络编程(一)
  14. 有关并联机器人动力学的学习
  15. 《高分辨率被动微波遥感——综合孔径微波辐射成像》附录仿真代码
  16. 大数据之道 HMM系列
  17. 信用评分卡DAY8-9
  18. 如何选择计算机软考科目,如何选择软考科目?
  19. 趋势面法优缺点_趋势面分析法
  20. html5游戏一键端,【稀有游戏】伊卡洛斯ol手工端+VM一键端+伊卡洛斯客户端

热门文章

  1. 10个最重要SQL Server事务日志神话
  2. sql执行组件是灰色的_如何分析SQL执行计划图形组件
  3. sql分区表上创建索引_SQL Server中分区表和索引的选项
  4. 在没有Docker容器的Ubuntu上安装SQL Server 2019
  5. opencv查找边界_数据边界:查找差距,孤岛等
  6. 实验二、XSS和SQL注入
  7. Ubuntu14.04安装tomcat-9.0.1的教程
  8. 查看日志tail命令
  9. Egret3D初步笔记二 (Unity导出场景使用)
  10. [Linux]Linux系统调用列表