随机验证码
发布时间:2020-12-15 17:19:53 所属栏目:大数据 来源:网络整理
导读:div class="postBody" div id="cnblogs_post_body" Python生成随机验证码,需要使用PIL模块.python3则是pillow 安装: 基本使用 1. 创建图片 2. 创建画笔,用于在图片上画任意内容 3. 画点 4. 画线 5.画圆 6. 写文本 7. 特殊字体文字 图片验证码 PIL io img
<div class="postBody"> Python生成随机验证码,需要使用PIL模块.python3则是pillow 安装: 基本使用1. 创建图片2. 创建画笔,用于在图片上画任意内容3. 画点4. 画线5.画圆6. 写文本7. 特殊字体文字图片验证码
![]() PIL io
img </span>= Image.new(mode=<span style="color: #800000;">'</span><span style="color: #800000;">RGB</span><span style="color: #800000;">'</span>,size=(120,40<span style="color: #000000;">),color</span>=(random.randint(0,255),random.randint(0,255<span style="color: #000000;">)))
draw </span>= ImageDraw.Draw(img,<span style="color: #800000;">'</span><span style="color: #800000;">RGB</span><span style="color: #800000;">'</span><span style="color: #000000;">)
font </span>= ImageFont.truetype(<span style="color: #800000;">'</span><span style="color: #800000;">app01/static/font/kumo.ttf</span><span style="color: #800000;">'</span>,25<span style="color: #000000;">)
valid_list </span>=<span style="color: #000000;"> []
</span><span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span> range(5<span style="color: #000000;">):
random_num </span>= str(random.randint(0,9<span style="color: #000000;">))
random_upper_alp </span>= chr(random.randint(65,90<span style="color: #000000;">))
random_lower_alp </span>= chr(random.randint(97,122<span style="color: #000000;">))
valid_ele </span>=<span style="color: #000000;"> random.choice([random_num,random_upper_alp,random_lower_alp])
valid_list.append(valid_ele)
draw.text([</span>5 + i * 24,10],valid_ele,(random.randint(0,255<span style="color: #000000;">)),font</span>=<span style="color: #000000;">font)
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 写干扰点</span>
<span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span> range(40<span style="color: #000000;">):
draw.point([random.randint(0,</span>120),40<span style="color: #000000;">)],fill</span>=(random.randint(0,random.randint(10,random.randint(64,255<span style="color: #000000;">)))
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 写干扰圆圈</span>
<span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span> range(40<span style="color: #000000;">):
draw.point([random.randint(0,255<span style="color: #000000;">)))
x </span>= random.randint(0,120<span style="color: #000000;">)
y </span>= random.randint(0,40<span style="color: #000000;">)
draw.arc((x,x </span>+ 4,y + 4),90<span style="color: #000000;">,255<span style="color: #000000;">)))
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 画干扰线</span>
<span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span> range(5<span style="color: #000000;">):
x1 </span>= random.randint(0,120<span style="color: #000000;">)
y1 </span>= random.randint(0,40<span style="color: #000000;">)
x2 </span>= random.randint(0,120<span style="color: #000000;">)
y2 </span>= random.randint(0,40<span style="color: #000000;">)
draw.line((x1,255<span style="color: #000000;">)))
f </span>=<span style="color: #000000;"> BytesIO()
img.save(f,</span><span style="color: #800000;">'</span><span style="color: #800000;">png</span><span style="color: #800000;">'</span><span style="color: #000000;">)
data </span>=<span style="color: #000000;"> f.getvalue()
valid_str </span>= <span style="color: #800000;">''</span>.join(valid_list) <span style="color: #008000;">#</span><span style="color: #008000;">将验证码拼接成字符串</span>
<span style="color: #0000ff;">print</span><span style="color: #000000;">(valid_str)
request.session[</span><span style="color: #800000;">"</span><span style="color: #800000;">keepValidCode</span><span style="color: #800000;">"</span>] = valid_str <span style="color: #008000;">#</span><span style="color: #008000;">将验证码保存在session中,方便在登陆时验证</span>
<span style="color: #0000ff;">return</span> HttpResponse(data)</pre>
![]() app01 django.contrib.auth
request.method == = render(request,,{== LoginForm(data== request.POST.get(
</span><span style="color: #0000ff;">if</span> <span style="color: #0000ff;">not</span><span style="color: #000000;"> form.is_valid():
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> HttpResponse(json.dumps(dict(form.errors)))
</span><span style="color: #0000ff;">if</span> validcode.upper() != request.session[<span style="color: #800000;">"</span><span style="color: #800000;">keepValidCode</span><span style="color: #800000;">"</span><span style="color: #000000;">].upper():
</span><span style="color: #0000ff;">return</span> HttpResponse(json.dumps(<span style="color: #800000;">'</span><span style="color: #800000;">codeError</span><span style="color: #800000;">'</span><span style="color: #000000;">))
user </span>= authenticate(**<span style="color: #000000;">form.cleaned_data)
</span><span style="color: #008000;">#</span><span style="color: #008000;"> user=models.UserInfo.objects.filter(**form.cleaned_data)</span>
<span style="color: #0000ff;">if</span> <span style="color: #0000ff;">not</span><span style="color: #000000;"> user:
</span><span style="color: #0000ff;">return</span> HttpResponse(json.dumps({<span style="color: #800000;">'</span><span style="color: #800000;">flag</span><span style="color: #800000;">'</span>: False,<span style="color: #800000;">'</span><span style="color: #800000;">msg</span><span style="color: #800000;">'</span>: <span style="color: #800000;">"</span><span style="color: #800000;">用户名或者密码错误</span><span style="color: #800000;">"</span><span style="color: #000000;">}))
</span><span style="color: #0000ff;">else</span><span style="color: #000000;">:
login(request,user) </span><span style="color: #008000;">#</span><span style="color: #008000;">设置session </span>
<span style="color: #0000ff;">return</span> HttpResponse(json.dumps({<span style="color: #800000;">'</span><span style="color: #800000;">flag</span><span style="color: #800000;">'</span>: True}))</pre>
img中src实现局部刷新验证码的功能html部分:
|
js部分:
或:
//+=
这部分最重要的就是 $("#codePic").attr("src","http://127.0.0.1:8888/TP/codePic?flag="+Math.random()); 这部分的代码。如果不加flag="+Math.random()是实现不了局部刷新的功能的。因为。具体为什么会发生这种情况大家可以自己去研究。而codePic其实是一个action。这个action的功能是利用java画笔画出验证码并打包成图片返回给img中的src。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!