苏彤,你的 Python Flask 编写生成二维码接口写完了

需求背景

本篇博客实战解决一个真是场景,需求描述如下: 为团队其它成员提供一个二维码生成接口,传入文本,返回图片地址,数据存储到 OSS 中。

采用 Python Flask 框架实现,并且使用一个第三方二维码模块,使用下述命令提前安装 qrcode

pip install qrcode

同时还需要安装一下 pillow,可以使用清华源。

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

入门级代码

直接写下面的代码,运行查看结果,因为博客不能上传二维码,不显示。

[En]

Directly write the following code, run to view the results, because the blog can not upload the QR code, do not show.

import 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")
img.show()

接下来,我们将对相关参数进行说明。

[En]

Next, we will explain the relevant parameters.

qrcode.QRCode() 参数清单:

qr.add_data() 添加要转换的内容,可以增加 optimize 参数,使用后,数据会被拆分为多个块进行优化。

make_image(fill_color=None, back_color=None,image_factory=None) 创建二维码图像并返回,可以使用 fill_color + back_color 添加颜色。

配合 Flask 制作 API

安装并搭建 Flask 框架,然后制作二维码生成接口,详细代码如下所示,其中 OSS 使用阿里云相关值即可。

import qrcode
from flask import Flask
from io import BytesIO
import time
import oss2

def 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 生成二维码项目就已经完成了~

Original: https://blog.51cto.com/cnca/5553390
Author: 梦想橡皮擦
Title: 苏彤,你的 Python Flask 编写生成二维码接口写完了

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504385/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 2021/6/7

    s## Python 从入门到实践 游戏实现(详解)第一次完整的做完一个游戏(深感Python的强大)(尽管积分系统没做全,之所以停下来,是想好好消化一下pygame的内容,自我感…

    Python 2023年9月25日
    060
  • 使用宝塔快速部署Django项目

    宝塔快速部署Django * – 1、安装uwsgi (windows 不支持uwsgi) : – 2、一般情况下在项目根目录下application生成w…

    Python 2023年8月5日
    076
  • ReactNative常用插件使用

    项目版本介绍 目前使用的项目node版本v14.17.5, npm版本6.14.14, reactNative项目使用的模板结合typescript语法的项目模板架构,安装的方式如…

    Python 2023年11月8日
    083
  • 用Python写一个新年倒计时

    ❤️‍🔥前言:春回大地,万象更新!春在招手,朋友们,我们一起互相祝愿吧!一年更比一年好。时光苒,岁月如梭。踏着新年欢快的钟声,我们又迎来了这个期待已久的日子过去的一年,我们有泪水也…

    Python 2023年9月15日
    062
  • Net5 WorkService 继承 Quarzt 以及 Net5处理文件上传

    Net5 版本以Core为底层非framework框架的windowservice 服务。 在VS里叫WorkService 可以以CMD方式运行也可以以Windowservice…

    Python 2023年6月6日
    099
  • django admin 使用

    Django admin 中一些常用的设置 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控…

    Python 2023年5月25日
    0179
  • 使用Scrapy框架爬取慕课网页

    想要完成一个scrapy爬虫框架,那首先得明确自己想要爬取的东西是什么,要选择什么样的爬取方法。接下来我就讲一下我使用Scrapy框架爬取慕课网的一些思路以及过程。 思路: (1)…

    Python 2023年10月2日
    0108
  • pytest+allure环境搭建步骤

    在命令提示符输入pip install pytest (命令提示符打开 win+R,输入cmd,回车) pip install pytest-allure-adaptor 前情提示…

    Python 2023年9月13日
    0104
  • 面试官:你说一说MySQL查询慢应该怎么办?

    偶尔慢: 上述所说的偶尔慢情况都是与MySQL系统刷新脏页有关。 而刷新脏页与 IOPS有关, IOPS,具体可以看我这篇文章点击查看。 Original: https://blo…

    Python 2023年10月7日
    078
  • python生信库(opencadd、openbabel)安装与绘图

    以下几个包通过anaconda安装十分方便,如果没有anaconda也可以使用python命令行安装。 openbabel Linux/unix系统下直接安装: apt-get i…

    Python 2023年9月9日
    074
  • 基于SpERT的中文关系抽取

    SpERT_chinese 基于论文SpERT: “Span-based Entity and Relation Transformer”的中文关系抽取,同…

    Python 2023年10月15日
    068
  • FLask框架AJAX操作

    FLask框架-AJAX(异步JavaScript与XML) – 潘登同学的flask学习笔记 文章目录 * – FLask框架-AJAX(异步JavaScript与X…

    Python 2023年8月10日
    096
  • python2048游戏的未来展望_python作业-2048小游戏

    需了解的知识 Pygame中的各个模块及其功能: Pygame.init():初始化所有导入的模块 pygame.display: pygame.display.init() — …

    Python 2023年9月25日
    091
  • 一零四、大数据可视化技术与应用实训(展示大屏幕)

    目录 一、定义 二、技能标准 三、实训安排 四、前台页面展示 五、项目架构 六、static 七、py文件 app.py data.py data_corp.py data_job…

    Python 2023年8月1日
    079
  • python拥有丰富的第三方库_Python第三方库的安装方法总结

    Python 是一门优雅的语言,简洁的语法,强大的功能。当然丰富的第三方库,更能加速开发。那么问题来了,如何安装这些第三方库(包)呢? 安装第三方库的方式其实不多。下面就介绍一些技…

    Python 2023年8月15日
    0118
  • 语音识别入门第一节:语音识别概述

    目录 语音识别的定义 语音识别的重要性 语音交互 语音识别的挑战性 语音识别的发展历史 语音识别的深度学习时代 现代语音识别框架 语料库与工具包 语音识别的定义 语音识别:Auto…

    Python 2023年9月27日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球