摘要:驗證碼制作模塊自帶數(shù)字字母特殊字符變量集合,不需要我們手寫集合生成隨機生成數(shù)字或字母生成干擾字符定義干擾字符顏色生成驗證碼建議下載幾款字體,變換下風(fēng)格,我在粒定義了路徑,這里就直接導(dǎo)入了填充顏色填充驗證碼填充驗證碼路由配置前端配置郵
驗證碼制作
#string模塊自帶數(shù)字、字母、特殊字符變量集合,不需要我們手寫集合 import string import random import os import uuid import settings from PIL import Image, ImageDraw, ImageColor, ImageFilter, ImageFont class Code(object): # 生成隨機生成數(shù)字或字母 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) #建議下載幾款字體,變換下風(fēng)格,我在setting粒定義了static路徑,這里就直接導(dǎo)入了 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源碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44623.html
摘要:現(xiàn)在的網(wǎng)頁中,為了防止機器人提交表單,圖片驗證碼是很常見的應(yīng)對手段之一?,F(xiàn)在就給出用的庫實現(xiàn)驗證碼圖片的代碼。代碼中有詳細注釋。生成的驗證碼圖片效果這時候,細心的同學(xué)可能要問,如果每次生成驗證碼,都要先保存生成的圖片,再顯示到頁面。 現(xiàn)在的網(wǎng)頁中,為了防止機器人提交表單,圖片驗證碼是很常見的應(yīng)對手段之一。這里就不詳細介紹了,相信大家都遇到過。 現(xiàn)在就給出用Python的PIL庫實現(xiàn)驗證...
摘要:目前還不是很熟悉的驗證表單的原理,比如驗證應(yīng)該是用,這種就是放在后端處理的。此時就需要手動控制表單的生成。如果表單驗證失敗,失敗的消息保存在中。 Flask-WTF遇到的坑 在使用Flask-WTF的時候,使用qucik_form()快速生成表單的確是很爽,但是生成的表單的樣式并不是想要的,這個時候就不能使用qucik_form()了。 PS:目前還不是很熟悉Flask-WTF的驗證表...
摘要:在這兩種情況下,如果你簽名的都是用戶,那么該用戶可以在激活賬戶和升級賬戶時,復(fù)用的可變部分。變量是一個元組,包括一個透視變換的系數(shù)。 額,一個突然的交流讓我想起來我耽擱許久各種驗證的實現(xiàn)遲遲沒做過趁著這個機會就搞了一下分為三部分:郵箱驗證,短信驗證,圖片驗證碼 郵箱驗證 這個部分是主要參考的經(jīng)典書籍-狗書思路就是根據(jù)用戶某些信息通過JSON Web簽名生成token,然后再發(fā)送郵件驗證...
閱讀 1451·2023-04-25 19:00
閱讀 4145·2021-11-17 17:00
閱讀 1761·2021-11-11 16:55
閱讀 1518·2021-10-14 09:43
閱讀 3115·2021-09-30 09:58
閱讀 853·2021-09-02 15:11
閱讀 2122·2019-08-30 12:56
閱讀 1402·2019-08-30 11:12