摘要:验证码制作模块自带数字字母特殊字符变量集合,不需要我们手写集合生成随机生成数字或字母生成干扰字符定义干扰字符颜色生成验证码建议下载几款字体,变换下风格,我在粒定义了路径,这里就直接导入了填充颜色填充验证码填充验证码路由配置前端配置邮
验证码制作
#string模块自带数字、字母、特殊字符变量集合,不需要我们手写集合 import string import random import os import uuid import settings from PIL import Image, ImageDraw, ImageColor, ImageFilter, ImageFont class Code(object): # 生成随机生成数字或字母 def random_hexdigits(self, len=1): return random.sample(string.hexdigits, len) # 生成干扰字符 def punctuation(self, len=1): return tuple(random.sample(string.punctuation, len)) # 定义干扰字符颜色 def random_color(self, min=64, max=255): return tuple((random.randint(min, max) for i in range(3))) # 生成验证码 def creat_code(self, width=80, height=24, color=(192, 192, 192)): image = Image.new("RGB", (width, height), color) #建议下载几款字体,变换下风格,我在setting粒定义了static路径,这里就直接导入了 font = ImageFont.truetype(os.path.join(settings.STATICPATH, "fonts/Lora-Regular.ttf"), 20) draw = ImageDraw.Draw(image) self.fill_color(draw, image, 5) self.fill_dischar(draw, image, 10) code = self.fill_char(draw, image, 4, 10, font) image_name = "{}.jpeg".format(uuid.uuid4().hex) image_path = os.path.join(settings.STATICPATH, "code/{}".format(image_name)) print(image_path) image.save(image_path) return {"code": code, "image_path": image_path} # 填充颜色 def fill_color(self, draw, image, interval): for i in range(0, image.width, interval): for j in range(0, image.height, interval): draw.point((i, j), fill=self.random_color()) # 填充验证码 def fill_dischar(self, draw, image, interval): for i in range(0, image.width, interval): dis = self.punctuation() j = random.randrange(3, image.height - 3) draw.text((i, j), dis[0], fill=self.random_color(64, 255)) # 填充验证码 def fill_char(self, draw, image, num, interval, font): code = "" for i in range(num): cha = self.random_hexdigits() code += str(cha[0]) j = random.randrange(0, 5) # print(cha) # print(image.width*(i/num)+interval,j) draw.text((image.width * (i / num) + interval, j), cha[0], fill=self.random_color(32, 127), font=font) return code if __name__ == "__main__": code = Code() print(code.creat_code())
flask路由配置
import os from flask import Flask, Response from flask import render_template from utils.code import Code app = Flask(__name__) @app.route("/") def Register(): return render_template("verify.html") @app.route("/codes/") def code(): infor = Code().creat_code() image_path = infor["image_path"] code = infor["code"] print(image_path) with open(image_path, "rb") as f: image_content = f.read() os.remove(image_path) return Response(image_content, mimetype="jpeg") if __name__ == "__main__": app.run(debug=True)
前端配置
引用github源码
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44623.html
摘要:现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一。现在就给出用的库实现验证码图片的代码。代码中有详细注释。生成的验证码图片效果这时候,细心的同学可能要问,如果每次生成验证码,都要先保存生成的图片,再显示到页面。 现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一。这里就不详细介绍了,相信大家都遇到过。 现在就给出用Python的PIL库实现验证...
摘要:目前还不是很熟悉的验证表单的原理,比如验证应该是用,这种就是放在后端处理的。此时就需要手动控制表单的生成。如果表单验证失败,失败的消息保存在中。 Flask-WTF遇到的坑 在使用Flask-WTF的时候,使用qucik_form()快速生成表单的确是很爽,但是生成的表单的样式并不是想要的,这个时候就不能使用qucik_form()了。 PS:目前还不是很熟悉Flask-WTF的验证表...
摘要:在这两种情况下,如果你签名的都是用户,那么该用户可以在激活账户和升级账户时,复用的可变部分。变量是一个元组,包括一个透视变换的系数。 额,一个突然的交流让我想起来我耽搁许久各种验证的实现迟迟没做过趁着这个机会就搞了一下分为三部分:邮箱验证,短信验证,图片验证码 邮箱验证 这个部分是主要参考的经典书籍-狗书思路就是根据用户某些信息通过JSON Web签名生成token,然后再发送邮件验证...
阅读 1420·2023-04-25 19:00
阅读 4103·2021-11-17 17:00
阅读 1732·2021-11-11 16:55
阅读 1493·2021-10-14 09:43
阅读 3084·2021-09-30 09:58
阅读 824·2021-09-02 15:11
阅读 2092·2019-08-30 12:56
阅读 1372·2019-08-30 11:12