Django实现验证码

Posted ray-h

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django实现验证码相关的知识,希望对你有一定的参考价值。

简单搞定生成验证码:

1.views.py

技术分享图片
from io import BytesIO
import random
from PIL import Image,ImageDraw,ImageFont
from utils.check_code import create_validate_code

def checkCode(request):
    return render(request,code_test.html)

def codetest(request):
    # # 获取随机颜色的函数
    # def get_random_color():
    #     return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
    #
    # # 生成一个图片对象
    # img_obj = Image.new(
    #     RGB,
    #     (220, 35),
    #     get_random_color()
    # )
    # # 在生成的图片上写字符
    # # 生成一个图片画笔对象
    # draw_obj = ImageDraw.Draw(img_obj)
    # # 加载字体文件, 得到一个字体对象
    # font_obj = ImageFont.truetype(arial.ttf, 28)
    # # 开始生成随机字符串并且写到图片上
    # tmp_list = []
    # for i in range(5):
    #     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)
    #     draw_obj.text((20 + 40 * i, 0), tmp, fill=get_random_color(), font=font_obj)
    #
    # # 保存到session
    # request.session["valid_code"] = "".join(tmp_list)
    # # 加干扰线
    # width = 220  # 图片宽度(防止越界)
    # height = 35
    # for i in range(5):
    #     x1 = random.randint(0, width)
    #     x2 = random.randint(0, width)
    #     y1 = random.randint(0, height)
    #     y2 = random.randint(0, height)
    #     draw_obj.line((x1, y1, x2, y2), fill=get_random_color())
    #
    # # 加干扰点
    # for i in range(40):
    #     draw_obj.point((random.randint(0, width), random.randint(0, height)), fill=get_random_color())
    #     x = random.randint(0, width)
    #     y = random.randint(0, height)
    #     draw_obj.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
    #
    # # 不需要在硬盘上保存文件,直接在内存中加载就可以
    # io_obj = BytesIO()
    # # 将生成的图片数据保存在io对象中
    # img_obj.save(io_obj, "png")
    # # 从io对象里面取上一步保存的数据
    # data = io_obj.getvalue()
    # return HttpResponse(data)
View Code

2.url

技术分享图片
urlpatterns = [
    path(admin/, admin.site.urls),
    url(^checkcode.html$,views.checkCode),
    url(^codetest.html,views.codetest),
]
View Code

3.html

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>验证码测试</title>
</head>
<body>
    <p><input type="text" placeholder="用户名"></p>
    <p><input type="text" placeholder="密码"></p>
    <p><input type="text" placeholder="验证码">
        <img src="/static/img/20181207212735.png" alt="">
        <img src="/codetest.html" alt="">
    </p>
</body>
</html>
View Code

 

以上是关于Django实现验证码的主要内容,如果未能解决你的问题,请参考以下文章

django 验证码实现

Django实现图片验证码

Django实现验证码

Django之路 - 实现登录随机验证码

64.django实现登录添加验证码功能

Django实现验证码