python_django__验证码
验证码:在用户注册/登陆时使用,为了防止暴力请求,减轻服务器压力,也是防止csrf的一种方式。
运行环境:python django
对应template模块htm函数:
登陆页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>验证码</title>
</head>
<body>
<form method="post" action="{% url 'inn:verificationcheck'%}"> <!--反向解析-->
<!--<form method="post" action="/sunck/verificationcheck/"> -->
{% csrf_token %}
<input type="text" name="verification_code"/>
<img src="/sunck/verification_code/">
<input type="submit" value="登陆"/>
<span>{{ flag }}</span> <!--状态码-->
</form>
</body>
</html>
verificationfile.html
登陆成功页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆成功</title>
</head>
<body>
<h1>登陆成功</h1>
</body>
</html>
success.html
对应url.py配置:
项目级:
from django.contrib import admin
from django.urls import include
from django.conf.urls import url
from my_inn import views
urlpatterns = [
path('admin/', admin.site.urls),
path('sunck/',include('my_inn.urls',namespace='inn')),
# 方便不同的app的管理 # namespace :与url的反向解析有关
]
urls.py
应用级:
from django.conf.urls import url
from django.urls import path
from . import views
app_name='inn'
urlpatterns = [
url(r'^verification_code/$', views.verification_code),
url(r'verificationfile/$',views.verificationfile),
url(r'verificationcheck/$', views.verificationcheck,name='verificationcheck'),
]
urls.py
对应views.py文件函数:
from django.shortcuts import render,redirect
from PIL import Image, ImageDraw, ImageFont # 引入绘图模块
import random # 引入随机函数模块
from django.http import HttpResponse
from io import BytesIO # 在内存中创建 # 颜色的填充
def get_random_color():
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
return color def verification_code(request):
# 1.1 定义变量,宽,高,背景颜色
width = 130
height = 50
background_color = get_random_color()
# 1.2 创建画布对象
image = Image.new('RGB', (width, height), background_color)
# 1.3 创建画笔对象
draw = ImageDraw.Draw(image)
# 1.4 调用画笔的point()函数绘制噪点
for i in range(0, 100):
xy = (random.randrange(0, width), random.randrange(0, height)) # 在尺寸内画点
draw.point(xy, fill=get_random_color())
# 1.5 调用画笔的line()函数制造线
for i in range(0, 5):
xy_start = (random.randrange(0, width), random.randrange(0, height))
xy_end = (random.randrange(0, width), random.randrange(0, height))
draw.line((xy_start, xy_end), fill=get_random_color()) # 2 用draw.text书写文字
rand_python = ''
# 随机选取4个值作为验证码
for i in range(4):
random_number = str(random.randint(0, 9)) # 数字0-9
random_lower_letter = chr(random.randint(97, 122)) # 字母a-z
random_upper_letter = chr(random.randint(65, 90)) # 字母A-Z
rand_python += random.choice([random_number, random_lower_letter, random_upper_letter,])
color = get_random_color() # 构造字体颜色
text_color = [0, 0, 0]
#
for j in range(2):
if color[j]-background_color[j] <= 30:
text_color[j] = 255-color[j]
else:
text_color[j] = color[j]
# 验证码字体及颜色
draw.text((i * (width/4) + 10, 2),
rand_python[i],
tuple(text_color),
font=ImageFont.truetype(r'C:\Windows\Fonts\CHILLER.TTF', 40),
align='center') # 3 释放画笔
del draw
# 存入session,用于做进一步的验证
request.session['verification_code'] = rand_python
# 内存文件操作
buf = BytesIO()
# 将图片保存在内存中,文件类型为png
image.save(buf, 'png')
# 将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(), 'image/png') def verificationfile(request):
rflag = request.session.get("flag",True)
str = ""
if rflag ==False:
str = "请重新输入"
request.session.clear()
return render(request,'myMain/verificationfile.html',{"flag":str}) def verificationcheck(request):
# 把接收到的验证码拿进来对比session中存储的验证码
code1 = request.POST.get("verification_code").upper() # 不区分大小写
code2 = request.session['verification_code'].upper()
if code1 == code2:
# 成功跳转页面
return render(request,'myMain/success.html')
else:
# 不成功重定向
request.session["flag"] = False
return redirect('/sunck/verificationfile/')
view.py代码转自:https://blog.csdn.net/weixin_43830248/article/details/86670064
python_django__验证码的更多相关文章
- .net点选验证码实现思路分享
哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...
- 【探索】无形验证码 —— PoW 算力验证
先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...
- TODO:Laravel增加验证码
TODO:Laravel增加验证码1. 先聊聊验证码是什么,有什么作用?验证码(CAPTCHA)是"Completely Automated Public Turing test to te ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- 随手记_C#验证码
前言 最近在网上偶然看见一个验证码,觉得很有意思,于是搜了下,是使用第三方实现的,先看效果: 总体来说效果还是可以的,官方提供的SDK也比较详细,可配置性很高.在这里在简单啰嗦几句使用方式: 使用步骤 ...
- WPF做12306验证码点击效果
一.效果 和12306是一样的,运行一张图上点击多个位置,横线以上和左边框还有有边框位置不允许点击,点击按钮输出坐标集合,也就是12306登陆的时候,需要向后台传递的参数. 二.实现思路 1.获取验证 ...
- 零OCR基础6行代码实现C#验证码识别
这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接 ...
- ASP.NET中画图形验证码
context.Response.ContentType = "image/jpeg"; //生成随机的中文验证码 string yzm = "人口手大小多少上中下男女天 ...
- asp.net mvc 验证码
效果图 验证码类 namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // Validat ...
随机推荐
- 区别:javascript:void(0);javascript:;
2015-07~2015-08 区别:javascript:void(0);javascript:; href="#",包含了一个位置信息.默认的锚是#top,也就是网页的上端. ...
- Java面试宝典(1)Java基础部分
Java面试宝典 题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要注意什么(这部分最重要,展现自己的心得) 答案的段落分别,层次分明, ...
- 【JDK1.8】Java 栈实现方式
看到一道面试题,问Java中栈的实现方式,记录下一些实现细节. API中有5个方法,分别是: boolean empty() E peek() E pop() E push() int search( ...
- 分布式锁实现(二):Zookeeper
目录 前言 设计实现 一.基本算法 二.关键点 临时有序节点 监听 三.代码实现 Curator源码分析 一.基本使用 二.源码分析 后记 前言 紧跟上文的:分布式锁实现(一):Redis ,这篇我们 ...
- Java IO之处理流
一.处理流: 增强功能,提供性能,在节点流之上. 二.节点流与处理流的关系 节点流(字节流.字符流)处于IO操作的第一线,所有操作必须通过它们进行: 处理流可以对其他流进行处理(提高效率或操作灵活性) ...
- Go基础之基本数据类型
Go基础之基本数据类型 基本数据类型 整形 int8.int16.int32.int64 无符号整形:uint8.uint16.uint32.uint64 uint8就是我们熟知的byte型 类型 描 ...
- Repeatable Read
在Repeatable Read隔离级别下,一个事务可能会遇到幻读(Phantom Read)的问题. 幻读是指,在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能 ...
- RFS自动化测试工具安装与使用总结
转载:http://blog.csdn.net/a5650892/article/details/77826021 一,调试1,在调试时,总时提示“无法打开浏览器”解决办法:1,把浏览器的代理关闭2, ...
- Java学习之集合(Collection接口)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储 集合特点: 1.用于存储对象的容器 2.集合长度可变 3.不可以存储基本数据类型 集合体系的顶层C ...
- [zz]C#多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作系 ...