首页 > 其他分享 >1006.Django项目用户功能之QQ登录

1006.Django项目用户功能之QQ登录

时间:2023-05-29 21:24:47浏览次数:40  
标签:QQ draw return self random param Django length 1006

一、PIL库

PIL : Python图像库PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。

环境中下载:pip install pillow

图像验证码

1. 初始化: 字符长度,宽度,高度,字符大小;

2. 随机产生字符:26个大小写字母和10个数字为源;

3. 随机颜色:让字符的颜色随机;

4. 绘制干扰线和干扰点

5. 模糊滤镜

同样,将图像验证码文件放置在utils文件夹编写,需求时进行导入调用

import os
import random
import string
from PIL import Image, ImageFont, ImageDraw, ImageFilter


class ImageVerify:
    def __init__(self, x=140, y=40, length=4, size=28):
        """
        初始化
        :param x: 图片宽度
        :param y: 图片高度
        :param length: 字符的个数
        :param size: 字体大小
        """
        self.x = x
        self.y = y
        self.length = length
        self.size = size

    def random_str(self):
        """
        随机生成制定长度的字符串
        数据源:26个字母和10个数字
        :return: 生成的字符串
        """
        soucre = string.ascii_letters + string.digits   # string模块生成字符串信息
        return ''.join(random.sample(soucre, self.length))

    def random_color(self, start=0, end=255):
        """
        随机生成颜色
        :param start: 颜色范围最小值
        :param end:  颜色范围最大值
        :return: tuple(r, g, b) 0~255
        """
        res = [random.randint(start, end) for i in range(3)] # []得到数据列表,()得到生成器并非元组,所以生成列表后转成元组
        return tuple(res)

    def random_lines(self, draw):
        """
        绘制干扰线
        :param draw: draw对象 画笔
        :return:
        """
        for i in range(self.length):
            lines = [(random.randint(0, self.x), random.randint(0, self.y)) for i in range(2)]
            draw.line(lines, fill=self.random_color(64, 200))

    def random_points(self, draw, rate):
        """
        绘制干扰点
        :param draw: 画笔
        :param rate: 频率
        :return:
        """
        for x in range(self.x):
            for y in range(self.y):
                if random.randint(1,  100) <= rate:
                    draw.point((x, y), fill=self.random_color(64, 200))

    def verify_code(self):
        """
        生成验证码图片
        :return: 图片及正确答案
        """
        # 创建Image对象 创建画布
        image = Image.new('RGB', (self.x, self.y), (255, 255, 255))   # 白色背景画布

        # 创建font对象 字体
        file = os.path.dirname(os.path.abspath(__file__))
        font = ImageFont.truetype(f'{file}/cybb.ttf', self.size)

        # 创建draw对象 画笔,绘制图形,线,点
        draw = ImageDraw.Draw(image)

        # 绘制干扰线与干扰点
        self.random_lines(draw)
        self.random_points(draw, 15)

        # 随机生成字符答案,验证码值
        code = self.random_str()

        # 用画笔将font类型的字体对应的进行字符内容和颜色的绘制
        for i in range(self.length):
            draw.text((35*i+5, 3), code[i], font=font, fill=self.random_color(30, 128))

        # 模糊滤镜
        # image = image.filter(ImageFilter.BLUR)

        # 返回图形及验证码
        return image, code


if __name__ == '__main__':
    imgVerfiy = ImageVerify()
    img, code = imgVerfiy.verify_code()
    # with open('test.png', 'wb') as fp:
    #     img.save(fp)
    # print(code)

二、Redis缓存

1. 连接配置

2. 缓存配置

3. 使用

4. 自定义认证响应

三、前端项目

四、前端环境

标签:QQ,draw,return,self,random,param,Django,length,1006
From: https://www.cnblogs.com/lxinghua/p/17441680.html

相关文章

  • QQ企业邮箱做域名解析,避免gmail退信
    开通腾讯企业邮箱后,域名怎么做域名DNS设置?开通企业邮箱后,登录域名管理权限,找到解析记录维护页,添加以下项: 1、MX记录:邮件服务器名:mxbiz1.qq.com.  优先级:5邮件服务器名:mxbiz2.qq.com.  优先级:10温馨提示:为了保证收信稳定,请您在设置的同时,删除其他MX记录。 2、使用m......
  • qq飞车端游最全按键指法教学
    目录起步篇超级起步弹射起步段位起步基础篇点飘撞墙漂移撞墙点喷进阶篇双喷叠喷断位漂移段位双喷侧身漂移快速出弯CWWCWCWW牵引甩尾点飘甩尾漂移右侧卡左侧卡高手篇拖飘滑行飘锁胎断空飘松前卡气卡气接漂移超级飘牵引超飘三喷连卡起步篇超级起步实战与高手对抗常用起步起步......
  • django数据库反向迁移
    目录django数据库反向迁移步骤一:连接MySQL方式一:使用pymysql连接方式二:使用mysqlclient连接步骤二:迁移数据库正向迁移(通过类创建表)反向迁移(通过表创建类)django数据库反向迁移步骤一:连接MySQL方式一:使用pymysql连接修改django的配置文件中的DATABASESDATABASES={'de......
  • Django与Postgres、Gunicorn和Nginx 容器化
    本文详细介绍了如何配置Django以在Docker上运行Postgres。对于生产环境,我们将添加Nginx和Gunicorn。我们还将了解如何通过Nginx提供Django静态和媒体文件。建立项目创建一个新的项目目录,然后开始Django项目:$mkdirdjango-on-docker&&cddjango-on-docker$mkdir......
  • super()在 Django 模板视图中使用
    Django模板视图用于呈现HTML模板并将数据传递给它们以供显示。super()您可以在Django模板视图中使用,轻松地从父模板视图继承属性和方法,并根据需要自定义或扩展它们。Django模板视图的一种常见用法super()是在get_context_data方法中,该方法用于将数据传递给模板以进行渲染。......
  • django 中的collectstatic
    django中的collectstatic在Django中,"collectstatic"是一个管理命令,用于收集和复制项目中的静态文件到一个指定的静态文件目录,以便于部署。当你开发一个Django项目时,通常会使用许多静态文件,如CSS样式表、JavaScript文件、图像等。这些文件通常存储在每个应用程序的"static"目录......
  • Django用户认证组件 (auth模块)
    1、导入auth模块#认证模块fromdjango.contribimportauth#对应数据库用户表,可以继承扩展fromdjango.contrib.auth.modelsimportUser2、创建用户对象create():创建一个普通用户,密码是明文的。create_user():创建一个普通用户,密码是密文的。create_superu......
  • django多表关联实战
    定义模型类:fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUser'''----------Django-ORM多表关联----------''''''需要创建的表:1.书籍表2.出版社表3.作者表4.作者详情表'''�......
  • django中的多表关联
    一、三种关联情况 二、ORM的正向操作和反向操作1.正向操作:一个模型中定义了一个外键,通过该模型对该外键操作的操作叫做正向操作。2.反向操作:被外键所关联的模型,通过该模型对外键所在模型的操作叫做反向操作。  -------------------  关联表的详细使用方式,引用:“ ......
  • django_ORM_数据库取值
    #查询方法1:直接查询models.Info_Phone.objects.filter(mobile="157137632",id=2)#查询方法2:把查询条件放在字典里面data_list={"mobile":"157137632","id":2}models.Info_Phone.objects.filter(**data_l......