5-django——验证码,中间件
验证码
在用户注册、登陆页面为了防止暴力请求,可以加入验证码。如果验证码错误,则不需要继续处理,可以减轻服务器的压力
使用验证码也是一种有效防止csrf的方法
def verifycode(request):#引入绘图模块from PIL import Image, ImageDraw, ImageFont#引入随机函数模块import random#定义变量,用于画面的背景色、宽、高bgcolor = (random.randrange(20, 100), random.randrange(20, 100), random.randrange(20, 100))width = 100height = 50#创建画面对象im = Image.new('RGB', (width, height), bgcolor)#创建画笔对象draw = ImageDraw.Draw(im)#调用画笔的point()函数绘制噪点for i in range(0, 100):xy = (random.randrange(0, width), random.randrange(0, height))fill = (random.randrange(0, 255), 255, random.randrange(0, 255))draw.point(xy, fill=fill)#定义验证码的备选值str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'#随机选取4个值作为验证码rand_str = ''for i in range(0, 4):rand_str += str[random.randrange(0, len(str))]#构造字体对象font = ImageFont.truetype(r'C:\Windows\Fonts\AdobeArabic-Bold.otf', 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))#绘制4个字draw.text((5, 2), rand_str[0], font=font, fill=fontcolor1)draw.text((25, 2), rand_str[1], font=font, fill=fontcolor2)draw.text((50, 2), rand_str[2], font=font, fill=fontcolor3)draw.text((75, 2), rand_str[3], font=font, fill=fontcolor4)#释放画笔del draw#内存文件操作import iobuf = io.BytesIO()#将图片保存在内存中,文件类型为pngim.save(buf, 'png')#将内存中的图片数据返回给客户端,MIME类型为图片pngresponse = HttpResponse(buf.getvalue(), 'image/png')#将验证码的值写入cookie,以被前端浏览器验证验证码# response.set_cookie("verifycode", rand_str)# 存入session,用于做进一步验证request.session['verifycode'] = rand_strreturn response
def login(request):if request.method == "GET":infoStr = "<h1>sunck is a good man</h1>"# infoStr = "<script>alert('sunck good')</script>"return render(request, "login.html", {"infoStr":infoStr})else:#判断验证码verifycode = request.POST.get("verifycode")if not verifycode.upper() == request.session.get("verifycode").upper():return redirect("/login/")username = request.POST.get("username")password = request.POST.get("password")if username == "sunck" and password == "sunck1999":return redirect("/index/")else:return redirect("/login/")
中间件
概述
一个轻量级、底层的插件系统,可以介入Django的请求和响应过程,处理Django的输入或输出
每个中间件组件都是一个独立的Python类
django中间件简单图解
方法
自定义中间件
在App目录下创建名为middlewares的包
在包中创建自己的中间件类文件
verifycodeMiddleware.py
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirectclass VerifycodeMiddleware(MiddlewareMixin):def process_request(self, request):print("***************", request.path)if request.path == "/login/" and request.method == "POST":# 判断验证码verifycode = request.POST.get("verifycode")if not verifycode.upper() == request.session.get("verifycode").upper():return redirect("/login/")
在settings.py文件中配阿置MIDDLEWARE
'myApp.middlewares.verifycodeMiddleware.VerifycodeMiddleware'
6-django——admin站点管理
5-django——验证码,中间件相关推荐
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Django的中间件
Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...
- Django 组件- 中间件
11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...
- Django之中间件,csrf跨站伪造请求,auth认证模块
Django请求生命周期 django的中间件 django的中间件相当于保安,请求的时候要经过django的中间件才能连接django的后端 能用来干什么:能够做网站的全局身份认证,访问频率,权限认 ...
- 07 Django组件-中间件
中间件 方式一:函数式:中间件[middleware],也叫钩子方法[钩子函数],hook Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Djang ...
- 13 Django之中间件
一.什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...
python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...
- django框架--中间件系统
目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...
- Django (八) 中间件验证码富文本缓存
中间件&验证码&富文本&缓存 1. 中间件&AOP 中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) 中间件的本质就是一个p ...
- Django 验证码4.4
验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 验证码视 ...
最新文章
- mybatis常见错误
- 马斯克连发三推,发布退出OpenAI内情
- vector删除第i个元素_[LeetCode] 215. 数组中的第K个最大元素
- Prometheus + Granafa 构建高大上的MySQL监控平台
- gevent.hub.LoopExit: ('This operation would block forever
- IIS7 / IIS7.5 URL 重写 HTTP 重定向到 HTTPS(转)
- Wire:Linux开源聊天应用
- 【正则】匹配html标签里的内容,不含标签
- datetimepicker 时间不更新_iOS 14.2 正式版推送:新增人体检测,这些功能值得更新...
- OpenGL phong lighting冯氏光照的实例
- 【Android】Android中Intent的用法总结
- Hibernate Synchronizer3——一个和hibernate Tool类似的小插件之使用方法
- lingo解题报告内容解释
- Alibaba Nacos 服务消费者工程接入nacos并实现调用服务提供者工程
- 直播丨2020年全国首场12c OCM直考揭秘
- python免费课程400节-宿州编程少儿课程
- Atitit 数据查询法 目录 1. 数据查询语言QL (推荐)	1 1.1. Sql	1 1.2. 对象查询语言(OQL)	1 1.3. Atitit QL查询语言总结Jpql Ongl
- 韩家炜课题组重磅发文:文本分类只需标签名称,不需要任何标注数据!
- UPC6605 所罗门王的宝藏
- 聚合数据API用法简介