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 ...
随机推荐
- wdcp后台登陆访问失败处理方法
用putty或xsheel链接 进入之后输入命令 service wdcp restart 之后显示ok就成功了
- 第三章 k8s的node节点配置
一.修改主机名 hostnamectl set-hostname xxx 二.修改hosts文件vim /etc/hosts 三.将写好的hosts文件拷贝到其他节点 scp /etc/hosts r ...
- 如何在MySQL中删除表中指定列的唯一键?
语法结构如下: alter table table_name drop index column_name;
- nodejs express的基本用法
demo /** * Created by ZXW on 2017/11/6. */ var express=require("express"); var server=expr ...
- vue X-Template
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 「NOI2016」循环之美(小性质+min_25筛)
传送门. 题解 感觉这题最难的是第一个结论. x/y首先要互质,然后如果在10进制是纯循环小数,不难想到y不是2.5的倍数就好了. 因为十进制下除以2和5是除得尽的. 必然会多出来的什么东西. 如果是 ...
- Yii2增、删、改、查
$order_model = OrderHeader::find()->where(['user_id'=>$user_id, 'order_type'=>'1'])->and ...
- [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
== 0) { convertView.setBackgroundResource(R.drawable.list_gray_9); } else { convertView.setBackgroun ...
- 工程师技术(一):启用SELinux保护、自定义用户环境、配置IPv6地址、配置聚合连接、配置firewalld防火墙
一.启用SELinux保护 目标: 本例要求为虚拟机 server0.desktop0 配置SELinux: 确保 SELinux 处于强制启用模式 在每次重新开机后,此设置必须仍然有效 方案: SE ...
- centos修改、保存文件的详细步骤
[一]修改文件 如果是使用普通用户登录的,需要先切换到管理员用户,打开终端,输入:su,接着按提示输入密码即可:然后使用命令进入需要修改文件的所在目录,常用的几个命令如下: ① cd + 目录名 ② ...