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 ...
随机推荐
- Alpha版本后的心得体会
Alpha版本后的心得体会 在我们一系列的努力之下,我们团队打造的校园互助式快递代取APP——U-Help的α版本终于能够问世了.尽管这个版本存在着这样那样的问题,但是我们还是对此抱有充足的信心.另一 ...
- Java 简单链表实现
1.初衷 最近在看Java基础,有一章节涉及到链表,便记之所学所得. 2.链表的定义 链表是存储地址不连续的线性存储结构 3.链表的基本结构 一个节点包含当前节点,与下个节点的引用 4.简单链表的实现 ...
- 前端用vue,后端需要nodejs吗?
其实用脚趾头想想也知道:后端用不用node,和前端用不用vue,二者完全没关系. 那为何用vue和vue插件开发前端的时候,经常需要各种npm install呢?为何要在本地安装node环境? 本地需 ...
- secureCRT 如何上传下载文件
首先连接相应服务器,然后在文件选项当中,打开SFTP功能,这个时候会生成一个新的标签栏. 下载: cd 到要下载文件的路径下 lcd 要存放文件的本地路径 get {filename} 例: cd ...
- python re.I compile search
import restring = "The quick brown fox jumps over the lazy dog."a_list = string.split()pat ...
- 纯前端html导出pdf--分页+不分页--html2canvas+jsPDF
前言 最近在项目中,有一个导出pdf功能,需要纯前端来实现,调研了多种pdf导出方式,最终决定使用html2canvas+jsPDF来实现需求. 本文就简单介绍一下html2canvas+jsPDF导 ...
- Vue学习笔记【3】——Vue指令之v-bind的三种用法
直接使用指令v-bind 使用简化指令: 在绑定的时候,拼接绑定内容::title="btnTitle + ', 这是追加的内容'" <!DOCTYPE html> & ...
- TxtUtil
/** *包名:cn.yufu.utils *描述:package cn.yufu.utils; */ package cn.yufu.utils; import java.io.BufferedRe ...
- D. Who killed Cock Robin--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 题目描述 由于系统限制,C题无法在此评测,此题为现场赛的D题 Who killed Cock Robin? I, ...
- vscode 编写Python走过的坑
1,在使用vscode 中import turtle 这个模块, 再调用t = turtle.Pen(),始终提示无法找到turtle模块 2.可是使用terminal 中调用turtle模块,没有问 ...