Django学习第四天
验证码
因所学Django项目中含有登录模块,于是乎想着现在基本所有的登录界面都需要验证码,于是学习了一下如何生成验证码图片并将它返回到前端。
from PIL import Image,ImageDraw,ImageFont
import random
from io import BytesIO
def get_valid_img(request):
# 生成随机颜色(随机RGB值)
def get_random_color():
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
# 生成一个图片对象
img_obj = Image.new(
'RGB',
(110, 35),
get_random_color()
)
# 在生成的图片上写字符
# 生成一个图片画笔对象
draw_obj = ImageDraw.Draw(img_obj)
# 加载字体文件, 得到一个字体对象
font_obj = ImageFont.truetype("static/CALIST.TTF", 28)
# 字体文件为系统字体文件,笔者为win10系统,可在C:\Windows\Fonts中找到
# 开始生成随机字符串并且写到图片上
tmp_list = []
a = ''
for i in range(3):
u = chr(random.randint(65, 90)) # 生成大写字母
l = chr(random.randint(97, 122)) # 生成小写字母
n = str(random.randint(0, 9)) # 生成数字,注意要转换成字符串类型
tmp = random.choice([u, l, n])
tmp_list.append(tmp)
a += tmp
draw_obj.text((0+40 * i, 0), tmp, fill=get_random_color(),font = font_obj)
# print(a)
request.session['check_num']=a #将正确的验证码存至session中,以便校对
io_obj = BytesIO()
img_obj.save(io_obj,'png')
data = io_obj.getvalue()
return HttpResponse(data,'image/png')
在路由中添加,user/urls.py
re_path(r'^yanzhengma',get_valid_img,name = 'valid'),#验证码
前端页面导入验证码图片
<img src="{% url 'user:valid' %}" alt=""/>
效果如下,笔者对前端了解不是很多故不是很美观,请大牛见谅
笔者目前才刚刚开始django的学习,如有错误之处,请大牛见谅指出