验证码

在用户注册、登陆页面为了防止暴力请求,可以加入验证码。如果验证码错误,则不需要继续处理,可以减轻服务器的压力

使用验证码也是一种有效防止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——验证码,中间件相关推荐

  1. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  2. Django的中间件

    Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...

  3. Django 组件- 中间件

    11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...

  4. Django之中间件,csrf跨站伪造请求,auth认证模块

    Django请求生命周期 django的中间件 django的中间件相当于保安,请求的时候要经过django的中间件才能连接django的后端 能用来干什么:能够做网站的全局身份认证,访问频率,权限认 ...

  5. 07 Django组件-中间件

    中间件 方式一:函数式:中间件[middleware],也叫钩子方法[钩子函数],hook Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Djang ...

  6. 13 Django之中间件

    一.什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...

  7. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...

    python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...

  8. django框架--中间件系统

    目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...

  9. Django (八) 中间件验证码富文本缓存

    中间件&验证码&富文本&缓存 1. 中间件&AOP 中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) ​ 中间件的本质就是一个p ...

  10. Django 验证码4.4

    验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 验证码视 ...

最新文章

  1. mybatis常见错误
  2. 马斯克连发三推,发布退出OpenAI内情
  3. vector删除第i个元素_[LeetCode] 215. 数组中的第K个最大元素
  4. Prometheus + Granafa 构建高大上的MySQL监控平台
  5. gevent.hub.LoopExit: ('This operation would block forever
  6. IIS7 / IIS7.5 URL 重写 HTTP 重定向到 HTTPS(转)
  7. Wire:Linux开源聊天应用
  8. 【正则】匹配html标签里的内容,不含标签
  9. datetimepicker 时间不更新_iOS 14.2 正式版推送:新增人体检测,这些功能值得更新...
  10. OpenGL phong lighting冯氏光照的实例
  11. 【Android】Android中Intent的用法总结
  12. Hibernate Synchronizer3——一个和hibernate Tool类似的小插件之使用方法
  13. lingo解题报告内容解释
  14. Alibaba Nacos 服务消费者工程接入nacos并实现调用服务提供者工程
  15. 直播丨2020年全国首场12c OCM直考揭秘
  16. python免费课程400节-宿州编程少儿课程
  17. Atitit 数据查询法 目录 1. 数据查询语言QL (推荐) 1 1.1. Sql 1 1.2. 对象查询语言(OQL) 1 1.3. Atitit QL查询语言总结Jpql Ongl
  18. 韩家炜课题组重磅发文:文本分类只需标签名称,不需要任何标注数据!
  19. UPC6605 所罗门王的宝藏
  20. 聚合数据API用法简介

热门文章

  1. MongoDB涉及的业务比较慢--慢查询优化分析案例--以及参数说明
  2. python学习笔记(7-11)
  3. PHP从数据库获取的下拉树
  4. 浅谈C中的指针和数组(一)
  5. mass Framework emitter模块
  6. EV代码签名证书,支持Windows 10预览版和正式版驱动签名
  7. es5 - array - pop
  8. rtmp Chunk stream ID 说明
  9. vue中使用swiper的一些坑
  10. 【GoLang】GoLang GOPATH 工程管理 最佳实践