验证码:在用户注册/登陆时使用,为了防止暴力请求,减轻服务器压力,也是防止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__验证码的更多相关文章

  1. .net点选验证码实现思路分享

    哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...

  2. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  3. TODO:Laravel增加验证码

    TODO:Laravel增加验证码1. 先聊聊验证码是什么,有什么作用?验证码(CAPTCHA)是"Completely Automated Public Turing test to te ...

  4. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  5. 随手记_C#验证码

    前言 最近在网上偶然看见一个验证码,觉得很有意思,于是搜了下,是使用第三方实现的,先看效果: 总体来说效果还是可以的,官方提供的SDK也比较详细,可配置性很高.在这里在简单啰嗦几句使用方式: 使用步骤 ...

  6. WPF做12306验证码点击效果

    一.效果 和12306是一样的,运行一张图上点击多个位置,横线以上和左边框还有有边框位置不允许点击,点击按钮输出坐标集合,也就是12306登陆的时候,需要向后台传递的参数. 二.实现思路 1.获取验证 ...

  7. 零OCR基础6行代码实现C#验证码识别

    这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接 ...

  8. ASP.NET中画图形验证码

    context.Response.ContentType = "image/jpeg"; //生成随机的中文验证码 string yzm = "人口手大小多少上中下男女天 ...

  9. asp.net mvc 验证码

    效果图 验证码类 namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // Validat ...

随机推荐

  1. TurtleBOT3

    ubuntu更换源 sudo cp /etc/apt/sources.list /etc/apt/sources_backup.list sudo gedit /etc/apt/sources.lis ...

  2. SpringMVC学习(4):数据绑定1 @RequestParam

    在系列(3)中我们介绍了请求是如何映射到一个action上的,下一步当然是如何获取到请求中的数据,这就引出了本篇所要讲的内容-数据绑定. 首先看一下都有哪些绑定数据的注解: 1.@RequestPar ...

  3. js转义符

    \0 :null(\u0000) \b :后退键(\u0008) \f :换页符(\u000C) \n :换行符(\u000A) \r :回车键(\u000D) \t :制表符(\u0009) \v ...

  4. 在MVC4.5.1中使用Ninject

    看完Pro ASP.NET MVC5的前14章之后,终于开始了自己的项目搭建. 打算在实际项目中使用Ninject 但是总是出现各种问题.这里记录一下 在书中使用的Ninject的版本是: Insta ...

  5. ionic3 图片(轮播)预览 ionic-gallary-modal组件使用方法

    一.效果展示 使用方法: 1.npm安装ionic-gallary-modal扩展模块 npm install ionic-gallery-modal --save 2.在app.module.ts根 ...

  6. mysql和sql server的按组连接

    sqlserver : for xml path mysql :group_contact

  7. C#多线程的应用

    1.进程 就像我们任务管理器里面运行的进程 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括 ...

  8. Metrics介绍和Spring的集成(转)

    转自:http://blog.csdn.net/smallnest/article/details/38491507 http://colobu.com/2014/08/08/Metrics-and- ...

  9. mysql 使用 insert ignore into和unique实现不插入重复数据功能

    执行插入操作,如果数据库中不存在才插入,否则就不插入 首先需要通过unique指定唯一约束字段 然后写sql语句的时候就写  insert ignore into () valuse () 这样就能实 ...

  10. python爬虫学习(3):使用User-Agent和代理ip

    使用User-Agent方法一,先建立head,作为参数传进去 import urllib.requestimport json content=input("请输入需要翻译的内容:&quo ...