二十六 .ajax登录 认证 验证码(session)
一. ajax 登录 认证 验证码
https://download.csdn.net/download/baobao267/10722491 Django之Form表单验证及Ajax验证方式汇总
https://download.csdn.net/download/baobao267/10722491 Django之Form表单验证及Ajax验证方式汇总 https://blog.csdn.net/HFZeng/article/details/98654307 https://blog.csdn.net/kkorkk/article/details/80150644 https://www.jb51.net/article/165394.htm https://segmentfault.com/q/1010000009345281 https://blog.csdn.net/huangql517/article/details/81259011
templates <!DOCTYPE html> <html lang="en"> <head>{% load staticfiles %}<meta charset="UTF-8"><title>login</title><link rel="stylesheet" type="text/css" href="{%static 'css/bootstrap.min.css'%}"><script type="text/javascript" src="{%static 'js/jq.js'%}"></script></head> <body> <h3 style="text-align: center">登录页面</h3><div class="container"><div class="row"><div class="col-md-8 col-md-offset-2"><form method="post" action=" ">{% csrf_token %}<div class="form-group"><label for="user">用户:</label><input type="text" class="form-control" name="user" id="user"></div><div class="form-group"><label for="pwd">密码:</label><input type="password" class="form-control" name="pwd" id="pwd"></div><div class="form-group"><label for="#">验证:</label><div class="row"><div class="col-md-6"><input type="text" class="form-control" name="code" id="code"></div><div class="col-md-6"> {# <img style="width:200px;height:37px; border-radius:3px;" src="{%static 'img/11.png'%}">#}<img style="width:160px;height:35px; border-radius:3px;" src="/get_img/" alt="图片" id="img"></div></div></div><button class="btn btn-success pull-right" id="login_btn">登录</button><span class="errs"></span></form></div></div></div> <script>$("#login_btn").click(function () {var user=$("#user").val();var pwd=$("#pwd").val();var code=$("#code").val();var csl=$("[name='csrfmiddlewaretoken']").val();$.ajax({url:"/login/",type:"post",data:{"user":user,"pwd":pwd,"code":code,"csl":csl},success:function (arg) {console.log(arg,typeof(arg))if (arg.user){{#登录成功了#}location.href="www.baidu.com"}else {{#失败#}$(".errs").html(arg.msg_err).css("color","red")}}}); {#<input type="hidden" name="csrfmiddlewaretoken" value="Sr7qsq3Y854eUp0Ef6vq3d7sO0joJmH6IMbU10ZNIrTnVh2WQdd48Nby4uTlo8AH">#} });{#点击验证码刷新#} $("#img").click(function () {this.src+="?" });</script> </body> </html>
views from django.shortcuts import render,HttpResponse from django.http import JsonResponse import random from django.contrib import auth def login(request):if request.method=="POST": # ===> request.is_ajax():user=request.POST.get("user")pwd = request.POST.get("pwd")code = request.POST.get("code")print(user,pwd,code,"111111111111")# AJAX请求返回字典response={"user":None,"msg_err":""}if code.upper()==request.session.get("keep_str").upper():user_obj=auth.authenticate(username=user,password=pwd)if user_obj:response["user"]=userelse:response["msg_err"] = "用户名或者密码错误!!!!"else:response["msg_err"]="验证码错误!!"return JsonResponse(response)else:return render(request, "01html/01login.html") 验证码 def get_img(request):# 方式一:读取指定图片 本地磁盘# with open("myapp/statics/img/11.png", "rb")as f1:# data=f1.read()# return HttpResponse(data)# 方式二:读取指定图片 基于pollow模块来创建验证码 生成图片 放在本地磁盘 from PIL import Image 在读取图片# from PIL import Image# def get_random_color(): # 获取图片随机颜色# return (random.randint(0,255),random.randint(0,255),random.randint(0,255))# img_png=Image.new("RGB",(350,60),get_random_color())# f1=open("myapp/statics/img/aa.png","wb")# img_png.save(f1,"png")# with open("myapp/statics/img/aa.png", "rb")as f1:# data=f1.read()# return HttpResponse(data)# 方式三 :生成图片放在内存中 放在内存上 使用内存模块 from io import BinaryIOfrom PIL import Image,ImageDraw,ImageFontfrom io import BytesIOdef get_random_color(): # 获取图片随机颜色return (random.randint(0,255),random.randint(0,255),random.randint(0,255))img_png = Image.new("RGB", (200,38),get_random_color()) # 相当于得到一个画板draw=ImageDraw.Draw(img_png) # 相当于得到一个画笔font=ImageFont.truetype("myapp/statics/font/aaa.ttf",25)keep_str=""for i in range(6):random_num=str(random.randint(0,9))random_lowalf = chr(random.randint(97, 122))random_upperf = chr(random.randint(65,90))random_chr=random.choice([random_num,random_lowalf,random_upperf])draw.text((i*20+40,5), random_chr,get_random_color(),font=font)keep_str+=random_chr# 噪点燥线width=200height=38for i in range(6):x1=random.randint(0,width)x2 = random.randint(0, width)y1=random.randint(0,height)y2 = random.randint(0, height)draw.line((x1,y1,x2,y2),fill=get_random_color())for i in range(20):draw.point([random.randint(0,width),random.randint(0,height)],fill=get_random_color())x = random.randint(0, width)y= random.randint(0, height)draw.arc((x,y,x+4,y+4),0,90,fill=get_random_color())# 内存写与读f=BytesIO()img_png.save(f,"png")data=f.getvalue()print(keep_str,"1111111111111")# 将验证码存入各自的session中request.session["keep_str"]=keep_strreturn HttpResponse(data)
urlsfrom django.contrib import admin from django.urls import path from home import index from myapp import views urlpatterns = [path('admin/', admin.site.urls),path('', index.index),path('login/', views.login),path('get_img/', views.get_img),]
2. 随机验证码
def get_img(request):# 方式一:读取指定图片 本地磁盘# with open("myapp/statics/img/11.png", "rb")as f1:# data=f1.read()# return HttpResponse(data)# 方式二:读取指定图片 基于pollow模块来创建验证码 生成图片 放在本地磁盘 from PIL import Image 在读取图片# from PIL import Image# def get_random_color(): # 获取图片随机颜色# return (random.randint(0,255),random.randint(0,255),random.randint(0,255))# img_png=Image.new("RGB",(350,60),get_random_color())# f1=open("myapp/statics/img/aa.png","wb")# img_png.save(f1,"png")# with open("myapp/statics/img/aa.png", "rb")as f1:# data=f1.read()# return HttpResponse(data)# 方式三 :生成图片放在内存中 放在内存上 使用内存模块 from io import BinaryIOfrom PIL import Image,ImageDraw,ImageFontfrom io import BytesIOimport randomdef get_random_color(): # 获取图片随机颜色return (random.randint(0,255),random.randint(0,255),random.randint(0,255))img_png = Image.new("RGB", (200,38),get_random_color()) # 相当于得到一个画板draw=ImageDraw.Draw(img_png) # 相当于得到一个画笔font=ImageFont.truetype("myapp/statics/font/aaa.ttf",25)keep_str=""for i in range(6):random_num=str(random.randint(0,9))random_lowalf = chr(random.randint(97, 122))random_upperf = chr(random.randint(65,90))random_chr=random.choice([random_num,random_lowalf,random_upperf])draw.text((i*20+40,5), random_chr,get_random_color(),font=font)keep_str+=random_chr# 噪点燥线width=200height=38for i in range(6):x1=random.randint(0,width)x2 = random.randint(0, width)y1=random.randint(0,height)y2 = random.randint(0, height)draw.line((x1,y1,x2,y2),fill=get_random_color())for i in range(20):draw.point([random.randint(0,width),random.randint(0,height)],fill=get_random_color())x = random.randint(0, width)y= random.randint(0, height)draw.arc((x,y,x+4,y+4),0,90,fill=get_random_color())# 内存写与读f=BytesIO()img_png.save(f,"png")data=f.getvalue()print(keep_str,"1111111111111")# 将验证码存入各自的session中request.session["keep_str"]=keep_strreturn HttpResponse(data)
转载于:https://www.cnblogs.com/lovershowtime/p/11482222.html
二十六 .ajax登录 认证 验证码(session)相关推荐
- C1认证学习二十六(基础选择器)
C1认证学习二十六(基础选择器) 任务背景 CSS选择器是CSS规则的一部分,用来指定需要设置的样式的HTML元素,通过选择器可以实现CSS对HTML元素一对一或者一对多或者多对一的控制了啦. 任务目 ...
- Shell脚本学习-阶段二十六-Web服务与端口
文章目录-Shell阶段二十六-端口与服务对照表 前言 端口与Web服务对照表 简介 前言 端口与Web服务对照表 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口: ...
- QT开发(六十六)——登录对话框的验证机制
QT开发(六十六)--登录对话框的验证机制 一.验证码机制 为了避免被恶意程序***,程序通常要使用安全机制.验证码机制是提供产生随机验证码,由用户识别填写来判断用户有效性的安全机制. 验证码必须动态 ...
- JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇
二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...
- 电脑高手应用技巧荟萃(电脑知识二十六)
电脑高手应用技巧荟萃(电脑知识二十六) 2010年12月07日 ★"锁定计算机"快捷方式 我想在桌面上创建一个"锁定计算机"的快捷方式,请问应该如何实现呢? 首 ...
- 2008R2Win7管理二十六ADRMS客户端使用及侦错
2008R2Win7管理二十六ADRMS客户端使用及侦错 预计我以后都没太多时间专研新技术和写文啦,尽量挤时间吧,有一篇放一篇吧,呵呵 本篇介绍在win7客户端使用adrms来进行权限管理和侦错,在使 ...
- 【Vue2.0】—vue-router(二十六)
[Vue2.0]-vue-router(二十六) 一.vue-router 的理解 它是vue 的一个插件库,专门用来实现 SPA 应用 二.对 SPA 应用的理 单页 Web 应用(single p ...
- (转)tensorflow入门教程(二十六)人脸识别(上)
https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...
- 2021年大数据Hadoop(二十六):YARN三大组件介绍
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...
最新文章
- Cocos 发射和监听事件 事件派送(TypeScript)
- ASP.NET管理状态的十种途径
- 将maven项目托管到github
- 大数据笔记-0907
- mysql映射mapper_Mybatis中Mapper映射文件使用详解
- 19 Signals and Signal Handling
- Java 8 终于支持 Docker !
- 如何向枚举中添加新值
- [noip2014]解方程 hash+秦九昭
- Nodejs修改镜像以及缓存路径
- element ui中table合并相同内容单元格
- python 图像快速替换某种颜色
- HCIP第九天笔记(OSPF的路由回馈、路由策略、以及配置指南)
- Windows 远程桌面连接方法及远程桌面控制软件推荐
- Fiddler配合夜神模拟器进行抓包
- 2017-百度-安全岗笔试
- Unity3D 200个插件免费分享
- eclipse左侧字体大小设置
- 浙大第四版概率论第一章思维导图
- PAT 1085 PAT单位排行 (Microsoft_zzt)
热门文章
- java populate_BeanUtils.populate()的用法
- Google Earth Engine(GEE)——MODIS 影像LST地表温度随时间变化的趋势案例分析
- Local declaration of '' hides instance variable
- 仿最新BiliBili客户端(已开源)
- Ubuntu 14.04安装bugzilla
- SAP中货物移动库位权限管理测试
- 2021年机修钳工(中级)考试内容及机修钳工(中级)考试总结
- Markdown由浅入深
- python永久配置pip下载镜像源方法(window版本)
- ios vs android设计