验证方式二 html标签验证码,Django标签、转义及验证码生成
一、模板
组成
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标签、转义及验证码生成相关推荐
- 分析|拥有11种验证方式的顶象无感验证,不仅省钱,还省时
验证码"作为人机交互界面经常出现的元素,其本质是为了防止用户利用机器人程序自动注册.登录.恶意投票.发送垃圾邮件.恶意尝试密码等登陆尝试,保证网络安全." 据统计,全球所有人每天需 ...
- python 全栈开发,Day46(列表标签,表格标签,表单标签,css的引入方式,css选择器)
一.列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: ul:unordered list,"无序列表"的 ...
- python全栈开发 * 表格标签 表单标签 css 引入方式 * 180807
html部分 一.表格标签<table> 1.一个表格<table>由每行<tr>组成的,每行是由<td>组成的. 注意: 一个表格是由行组成的(行是由 ...
- Day46(列表标签,表格标签,表单标签,css的引入方式,css选择器)
一.列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: ul:unordered list,"无序列表"的 ...
- 前端之body标签中相关标签(二)
一 列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: a.ul:unordered list,"无序列表" ...
- javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...
- javaweb学习总结(二十五)——jsp简单标签开发(一)
一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...
- 电子防盗标签 之二:声磁软标签 《转》
转自:拆解声磁软标签(超市电子防盗标签),顺便恶补一下工作原理| http://bbs.mydigit.cn/read.php?tid=2142954 电子防盗标签 之二:声磁软标签 电子防盗标签属于 ...
- 烦人的谷歌验证码被破解怎么办?下一代隐藏验证方式现身
谷歌弃用形同虚设的图片验证码,新昕科技推出无感解决方案 2016年2月,谷歌Google宣布即将停止全球图片验证码服务,这个困扰我们多年的验证码终于要退出历史的舞台了.官方宣告可以看以下截图: 想必验 ...
最新文章
- 为什么要使用Go语言?Go语言的优势在哪里?
- vs code中文乱码解决方法
- (chap1 网络基础知识)一些概念
- Java(21)_ ^、|、运算符
- 取 Oracle Schema信息
- C++中的STL--结构概览
- 【并查集+dp】Team
- 如何优雅地编写Java
- docker安装chirpstack_用docker-compose快速部署ChirpStack
- 迎接2019多校联合新生训练赛(2018/12/31)
- python命令行参数作用_python中命令行参数和os模块常用函数
- python源码打包成exe、exe反编译、pyd加密防止反编译
- linux网络编程(一)
- 有关并联机器人动力学的学习
- 《高分辨率被动微波遥感——综合孔径微波辐射成像》附录仿真代码
- 大数据之道 HMM系列
- 信用评分卡DAY8-9
- 如何选择计算机软考科目,如何选择软考科目?
- 趋势面法优缺点_趋势面分析法
- html5游戏一键端,【稀有游戏】伊卡洛斯ol手工端+VM一键端+伊卡洛斯客户端
热门文章
- 10个最重要SQL Server事务日志神话
- sql执行组件是灰色的_如何分析SQL执行计划图形组件
- sql分区表上创建索引_SQL Server中分区表和索引的选项
- 在没有Docker容器的Ubuntu上安装SQL Server 2019
- opencv查找边界_数据边界:查找差距,孤岛等
- 实验二、XSS和SQL注入
- Ubuntu14.04安装tomcat-9.0.1的教程
- 查看日志tail命令
- Egret3D初步笔记二 (Unity导出场景使用)
- [Linux]Linux系统调用列表