django 验证码生成以及登录功能的实现
我们在项目中的views.py中来写函数,
代码如下:
def verifcode(request):
#引用绘画模块
from PIL import Image,ImageDraw,ImageFont
#引用随机函数模块
import random
#定义变量,用于画面的背景色、宽、高
bgcolor = (random.randrange(20,100),random.randrange(20,100),random.randrange(
20,100))
width = 110
height = 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\AdobeFanHeitiStd-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
#存入session,用于进一步验证
request.session['verifycode'] = rand_str
#内存文件操作
import io
buf = io.BytesIO()
#将图片保存在内存中
im.save(buf,'png')
#将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(),'image/png')
在urls.py中配置路由
代码如下:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r’^verifcode/$’,views.verifcode),
]
结果如图:
验证码生成后我们要实现的就是登录功能
我们在templates中的 项目下新建一个html文件,
主要目的是新建登录并将上面的验证码图片路径迁入页面中
(界面简洁功能实现就好,(●’◡’●)嘻嘻嘻)
我们继续在views.py文件中新建函数
def verifycodefile(request):
return render(request,‘myApp/verifycodefile.html’)
在urls.py文件中配置路由
代码如下:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^verifcode/$',views.verifcode),
url(r'^verifycodefile/$',views.verifycodefile),
]
结果如图:
结束啦~O(∩_∩)O
仅供参考,(ง •_•)ง✊