IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python一键生成验证码并部署(django) -> 正文阅读

[Python知识库]Python一键生成验证码并部署(django)

生成验证码

生成验证码我们主要使用到三个东西在Pillow当中

  1. Image(),使用它的Image.new()方法创建一个图片的画布

  2. ImageDraw 的Draw()方法的text()和 point() 方法进行绘图

  3. ImageFont() 的truetype()方法,主要用来设置字体和大小

通过这几个方法就可以实现一个验证码的生成,加起来不会超过40行代码实现

from PIL import Image,ImageFont,ImageDraw
import random


def main():
    color_bg = (Set_Color(),Set_Color(),Set_Color())
    image = Image.new("RGB",size=(150,50),color=color_bg)
    
    imagedraw = ImageDraw.Draw(image,"RGB")

    font = ImageFont.truetype("/media/ALGER.TTF", 55)
    imagedraw.text(xy=(0,0),text=GetCode(),font=font,fill=(255,255,255))

    for i in range(800):
        #绘制干扰点
        imagedraw.point(xy=(random.randrange(150), random.randrange(50)),fill=(Set_Color(),Set_Color(),Set_Color()))
    # image.save("1.jpg")
    image.show()

def GetCode():
    source = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'
    code = ""
    for i in range(4):
        code += random.choice(source)
    return code

def Set_Color():
    return random.randrange(255)

if __name__=="__main__":
    main()

效果如下:
在这里插入图片描述
在这里插入图片描述

在Django当中部署

创建Django项目。
更多关于Django的博文请参考:web学习系列
先来看看路由结构
在这里插入图片描述
在这里插入图片描述
三个接口,一个是登录页面,一个是登录后的页面,还有一个是接口,
在这里插入图片描述
工具类代码

# coding=utf-8
import random
from io import BytesIO

from PIL import Image,ImageFont,ImageDraw

def GetCode():
    source = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'
    code = ""
    for i in range(4):
        code += random.choice(source)
    return code


def Set_Color():
    return random.randrange(255)

def Send_code_img(request):

    color_bg = (Set_Color(), Set_Color(), Set_Color())
    image = Image.new("RGB", size=(150, 50), color=color_bg)

    imagedraw = ImageDraw.Draw(image, "RGB")

    font = ImageFont.truetype("/static/Font/ALGER.TTF", 55)
    YanZhen_code = GetCode()
    imagedraw.text(xy=(0, 0), text=YanZhen_code, font=font, fill=(255, 255, 255))

    request.session["verify_code"]=YanZhen_code

    for i in range(800):
        # 绘制干扰点
        imagedraw.point(xy=(random.randrange(150), random.randrange(50)), fill=(Set_Color(), Set_Color(), Set_Color()))

    # image.show()
    fp = BytesIO()
    image.save(fp,"png")

    return fp.getvalue()

if __name__=="__main__":
    pass


views的代码

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from django.urls import reverse
from django.views.decorators.csrf import csrf_exempt
from APP.TOOLS.YanZhen import Send_code_img


def Mine(request):
    return HttpResponse("欢迎登录")

@csrf_exempt
def Login(request):
    if request.method == "GET":
        return render(request, "YanZhen.html")
    elif request.method == "POST":
        post_code = request.POST.get("Get_code")
        verify_code = request.session.get("verify_code")
        if post_code.lower() != verify_code.lower():
            return redirect(reverse("APP:Login"))
        return redirect(reverse("APP:Mine"))



def Get_code_img(request):
    code_img = Send_code_img(request)
    return HttpResponse(code_img, content_type='image/png')

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>验证码验证</title>
    {% load static %}

</head>
<body>
<form action="{% url "APP:Login" %}" method="POST" >

    <span>请输入验证码:</span><input type="text" name="Get_code" placeholder="请输入验证码">
    <br>
    <img id="img" src="{% url "APP:get_code_img" %}">

    <br>
    <button>提交</button>

</form>

</body>
<script type="text/javascript" src="{% static 'JS/JQuery/jquery.js' %}"></script>
<script>

    $(()=>{
        $("#img").click(()=>{
            let getpicurl="/app/get_code_img/?pic="+Math.random();
            $("#img").attr("src", getpicurl);
            console.log(getpicurl);
        })

    })
</script>

</html>

效果
在这里插入图片描述
在这里插入图片描述
页面比较丑,这个后面css处理一下

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:21:33  更:2021-08-17 15:21:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 12:44:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计