python-Web-django-图形验证
import random
def get_random_color():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def get_valid_code_img(request):
# 方式1:
# with open("lufei.jpg","rb") as f:
# data=f.read() # 方式2: # pip install pillow # from PIL import Image
# img=Image.new("RGB",(270,40),color=get_random_color())
#
# with open("validCode.png","wb") as f:
# img.save(f,"png")
#
# with open("validCode.png","rb") as f:
# data=f.read() # 方式3: # from PIL import Image
# from io import BytesIO
#
# img=Image.new("RGB",(270,40),color=get_random_color())
# f=BytesIO()
# img.save(f,"png")
# data=f.getvalue() # 方式4: from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import random img = Image.new("RGB", (270, 40), color=get_random_color())#生成一个宽270*高40的画布,背景颜色随机 draw = ImageDraw.Draw(img)#进行绘画
kumo_font = ImageFont.truetype("../static/font/ahronbd.ttf", size=42)#字体 字体大小 valid_code_str = "" for i in range(4):
random_num = str(random.randint(0, 9))#0-9的随机数 9
random_low_alpha = chr(random.randint(97, 122))#a 到 z 随机的一个小写字母 b
random_upper_alpha = chr(random.randint(65, 90))#A 到 Z 随机的一个大写字母 Q
random_char = random.choice([random_num, random_low_alpha, random_upper_alpha]) #
draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font) #往长方形上写字 # 保存验证码字符串
valid_code_str += random_char #
#
width=270
height=40
# for i in range(10):
# x1=random.randint(0,width)
# y1=random.randint(0,height)
# x2=random.randint(0,width)
# y2=random.randint(0,height)
# draw.line((x1,y1,x2,y2),fill=get_random_color()) #画线
# #
for i in range(10):
# 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()) #小线段 request.session["valid_code_str"] = valid_code_str.upper() '''
1 sdajsdq33asdasd
2 COOKIE {"sessionid":sdajsdq33asdasd}
3 django-session
session-key session-data
sdajsdq33asdasd {"valid_code_str":"12345"} ''' f = BytesIO()
img.save(f, "png") #png
data = f.getvalue()
return data
views:
from django.shortcuts import render,HttpResponse,redirect
import json
from app01.models import * def login(request):
''''''
res = {'s': None, 'info': None}
if request.method == 'POST':
print(request.POST)
username = request.POST.get('LoginName')
pwd = request.POST.get('Password')
code = request.POST.get('code')
code = code.upper()
if code != request.session['valid_code_str']:
'''验证码输入错误'''
res['s'] = 0
res['info'] = '验证码输入错误'
print(res)
return HttpResponse(json.dumps(res)) manage_obj = Manage.objects.filter(name=username, pwd=pwd).first()
print(manage_obj)
if not manage_obj:
res['s'] = 0
res['info'] = '登陆失败'
print(2)
print(res)
return HttpResponse(json.dumps(res))
request.session['manage_name'] = manage_obj.name
request.session['manage_id'] = manage_obj.id
print(3)
res['s'] = 1
res['info'] = '登陆成功'
print(2)
print(res)
return HttpResponse(json.dumps(res)) return render(request,'index/login.html',locals()) def login2(request):
'''图像码'''
from app01.utils import validCode
vc = validCode.get_valid_code_img(request)
print(request.session['valid_code_str'])
return HttpResponse(vc, 'image/png') from back.views.ddff import ddff
@ddff
def out(request):
'''退出'''
a = 'User, you have successfully quit, welcome to use next time'
del request.session['manage_name']
del request.session['manage_id']
return render(request, 'index/login.html', locals())
html:
<form action="" method="post">
{% csrf_token %}
<ul>
<li><input name="LoginName" type="text" class="loginuser" placeholder="admin"/></li>
<li><input name="Password" type="text" class="loginpwd" placeholder="密码"/></li>
<li class="yzm" style="width:230px;height:60px ;">
<span><input name="code" type="text" placeholder="验证码"/><img width="115" height="46" id="valid_code_img" src="/back/login/login2/" alt="" onclick="this.src='/back/login/login2/?'+Math.random()" style="position: absolute;"></span> </li> <li>
<input id="submitBtn" type="button" class="loginbtn" value="登录"/>
<label><input name="" type="checkbox" value="" checked="checked" />记住密码</label>
{# <label><a href="#">忘记密码?</a></label>#}
</li>
</ul>
</form> <script>
$(document).ready(function () {
$("#submitBtn").click( function () {
// 点击事件
$.post("/back/login/login/",$('form').serialize() , function (data) {
//LoginName,Password,code
if (data['s'] == 1) {
layer.msg("登录成功!");
// 跳转主页面
location.href="{% url 'back:index/index/' %}";
} else {
//登陆失败
layer.msg(data['info']);
}
return false;
}, "json"); })
})
</script>
python-Web-django-图形验证的更多相关文章
- python web -- django
一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...
- python web——Django架构
环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...
- python web django base skill
web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...
- python web django 2nd level -- 待更新
练习代码位置 实例代码位置 --> app: myblog Form 利用Form表单验证,自己写的html 思路: 新建一个类 LoginForm(forms.Form) 新建对象 obj = ...
- [Python] 利用Django进行Web开发系列(一)
1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...
- python web框架——扩展Django&tornado
一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...
- python web框架Django入门
Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
随机推荐
- Spring事务源码分析
首先看例子,这例子摘抄自开涛的跟我学spring3. @Test public void testPlatformTransactionManager() { DefaultTransactionDe ...
- hive日期函数-广发实战(三)
近一月客户新增常规里程数与额度比即上个月 第一天(包含)到上个月最后一天(包含) 字段是batch_date==>格式是 yyyymmdd ),'MM'),'-',''); +--------- ...
- ajax给增删修加入非空
<span>标签加入 <script type="text/javascript"> $(".inp2").click(function ...
- JavaScript 中 console 的用法 -------------------引用
1.在调试 JS 代码时,很多人倾向于使用 alert() 或者 console.log() 方法来输出信息,正如某些 Java 程序员喜欢在调试代码时使用System.out.println() 输 ...
- 交换机配置——三层交换机实现VLAN间通信
一.实验目的::用三层交换机让同一vlan的主机能通信,不同vlan的主机也能通信 二.拓扑图如下 三.具体步骤如下:. 先给每台主机和服务器配置ip地址和网关 例: (1)S1三层交换机配置: Sw ...
- CDOJ 1255 斓少摘苹果 图论 2016_5_14
斓少摘苹果 Time Limit: 3000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- 20190716NOIP模拟赛T1 礼物(概率dp+状压)
题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得). 每次,店员会 ...
- 第03组 Alpha冲刺(3/4)
队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...
- jdk中使用的设计模式
在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,研究JDK类库中的模式实例也不失为学习如何使 ...
- JavaWeb_(Struts2框架)参数传递之接收参数与传递参数
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...