程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

蘇彤,你的 Python Flask 編寫生成二維碼接口寫完了

編輯:Python

需求背景

本篇博客實戰解決一個真是場景,需求描述如下:
為團隊其它成員提供一個二維碼生成接口,傳入文本,返回圖片地址,數據存儲到 OSS 中。

采用 Python Flask 框架實現,並且使用一個第三方二維碼模塊,使用下述命令提前安裝 qrcode

pip install qrcode

同時還需要安裝一下 pillow,可以使用清華源。

pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

入門級代碼

直接編寫如下代碼,運行查看結果,由於博客無法上傳二維碼,顧不進行展示。

import qrcodeqr = qrcode.QRCode( version=3,error_correction=qrcode.constants.ERROR_CORRECT_Q,box_size=10,border=4)qr.add_data("https://www.pachong.vip")qr.make(fit=True)img = qr.make_image(fill_color="black",back_color="white")img.show()

接下來對相關參數進行一下說明。

qrcode.QRCode() 參數清單:

  1. version:二維碼大小,取值范圍 1 到 40,當等於 1 時,大小是 21*21,取值為 None 或者後續使用 fit=true 時,二維碼自動調整大小。
  2. error_correction:糾錯級別,有如下取值:
    ERROR_CORRECT_L:7%以下會被糾正;
    ERROR_CORRECT_M:默認值,15%以下會被糾正;
    ERROR_CORRECT_Q:25%以下會被糾正;
    ERROR_CORRECT_H:30%以下會被糾正。
  3. box_size:每個個字的像素數,默認 10;
  4. border:二維碼四周留白的格子,默認為 4;
  5. image_factory:圖片生成形式,默認為 PIL,這也是為啥安裝 pillow 的原因;
  6. mask_pattern:掩模。

qr.add_data() 添加要轉換的內容,可以增加 optimize 參數,使用後,數據會被拆分為多個塊進行優化。

make_image(fill_color=None, back_color=None,image_factory=None) 創建二維碼圖像並返回,可以使用 fill_color + back_color 添加顏色。

配合 Flask 制作 API

安裝並搭建 Flask 框架,然後制作二維碼生成接口,詳細代碼如下所示,其中 OSS 使用阿裡雲相關值即可。

import qrcodefrom flask import Flaskfrom io import BytesIOimport timeimport oss2def upload_qrcode(bytes_content, qrcode_name): # 阿裡雲賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM用戶進行API訪問或日常運維,請登錄RAM控制台創建RAM用戶。 auth = oss2.Auth('AK', 'AS') # yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 # 填寫Bucket名稱。 bucket = oss2.Bucket(auth, 'oss-cn-beijing.aliyuncs.com', 'Bucket') # 填寫Object完整路徑和Bytes內容。Object完整路徑中不能包含Bucket名稱。 bucket.put_object(qrcode_name, bytes_content)app = Flask(__name__)@app.route('/qrcode')def qrcode_func(): create_qrcode() return 'Hello, World!'def create_qrcode(): qr = qrcode.QRCode( version=3, error_correction=qrcode.constants.ERROR_CORRECT_Q, box_size=10, border=4 ) qr.add_data("https://www.pachong.vip") qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") # print(type(img)) img_byte = BytesIO() img.save(img_byte, format='PNG') binary_content = img_byte.getvalue() # im對象轉為二進制流 upload_qrcode(binary_content)if __name__ == '__main__': app.run(debug=True)

其中用到了 BytesIO 將圖片轉換為二進制流,便於直接上傳到 oss 中,後續邏輯只需要在 Flask 中配置返回拼接的地址即可。

file_name = create_qrcode()domain = "https://cdn.pachong.vip/qr/"if file_name: data = { "src": domain + file_name, "code": 200 }else: data = { "src": "", "code": 500 }response = json.dumps(data)return response, 200, {"Content-Type": "application/json"}

此時在通過浏覽器訪問,會得到一個 JSON 字符串,其中 src 就是拼接的 URL,code 是響應狀態碼。

{ "src": "https://cdn.pachong.vip/qr/1658397523.png", "code": 200 }

接下來給 Flask 加上一個 ULR 參數,二維碼基於傳入的 URL 生成,修改 qrcode_func() 函數,在其中增加參數獲取邏輯。

url = request.args.get("url", None)# print(url)if url is None: return json.dumps({"msg": "缺少url", "src": "", "code": 500}), 200, {"Content-Type": "application/json"}

邏輯實現完畢之後,就可以上傳 CentOS 系統進行部署了。

此時一個完整的 Python Flask 生成二維碼項目就已經完成了~


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved