当前位置: 首页 > news >正文

python 自动化从入门到实战-做一个超实用的二维码生成工具(5)

10分钟学会!用Python做一个超实用的二维码生成工具

今天要给大家分享一个超实用的Python小工具——二维码生成器

不管是分享网址、添加好友还是制作活动物料,二维码都是我们日常生活和工作中经常用到的工具。今天,我们就来看看如何用Python快速搭建一个属于自己的二维码生成网站,简单到连编程小白都能跟着做!

一、这个工具能做什么?

我们要做的这个二维码生成工具,功能可强大了:

✅ 只要在网页里输入文字、网址或任何内容,就能立刻生成对应的二维码
✅ 生成的二维码会自动保存在电脑上,再也不怕找不到
✅ 支持直接下载二维码图片,方便你随时使用
✅ 界面简洁友好,就算是第一次使用也能轻松上手

局域网访问地址
http://127.0.0.1:5000/generate_qr

运行项目即可:
在这里插入图片描述
在这里插入图片描述

二、需要准备什么?

做这个工具其实非常简单,只需要准备几样东西:

  1. 安装好Python(版本3.6以上)
  2. 安装几个必要的Python库
  3. 一点耐心和好奇心

三、核心代码解析

话不多说,我们来看看这个工具的核心代码是怎么写的吧!

1. 先搭好框架

首先,我们需要用Flask框架搭建一个简单的Web应用:

from flask import Flask, render_template, request, send_file
import qrcode
import os
from datetime import datetime
import ioapp = Flask(__name__)# 确保保存图片的目录存在
QR_IMAGES_DIR = "qr_images"
if not os.path.exists(QR_IMAGES_DIR):os.makedirs(QR_IMAGES_DIR)

这段代码就像是建房子前先打好地基,我们导入了必要的工具库,并创建了一个Flask应用实例。特别要注意的是os.makedirs这一行,它会自动帮我们创建一个存放二维码图片的文件夹,非常贴心!

2. 设计首页

接下来,我们需要设计一个简单的首页,让用户可以输入要生成二维码的内容:

@app.route('/')
def index():return render_template('index.html')

这几行代码就像给房子装了一扇门,当用户访问我们的网站时,就会看到一个漂亮的输入页面。

3. 核心功能:生成二维码

最关键的部分来了,我们需要编写生成二维码的功能:

@app.route('/generate_qr', methods=['POST'])
def generate_qr():# 获取用户输入的内容content = request.form.get('content', '')if not content:return render_template('index.html', error='请输入内容后再生成二维码')try:# 生成二维码qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=4,)qr.add_data(content)qr.make(fit=True)# 创建二维码图片img = qr.make_image(fill_color="black", back_color="white")# 生成唯一的文件名timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')file_name = f"qr_code_{timestamp}.png"file_path = os.path.join(QR_IMAGES_DIR, file_name)# 保存图片到本地img.save(file_path)# 返回结果页面,显示二维码return render_template('result.html', qr_image=file_path, content=content,file_name=file_name)except Exception as e:return render_template('index.html', error=f'生成二维码失败: {str(e)}')

这段代码就像是房子的心脏,它做了几件重要的事:

  • 获取用户在网页上输入的内容
  • 使用qrcode库把内容转换成二维码图片
  • 给图片取一个包含时间戳的唯一名字(这样就不会重复啦!)
  • 把图片保存到我们之前创建的文件夹里
  • 最后显示一个包含二维码的结果页面

4. 添加下载功能

为了让用户能够方便地获取二维码图片,我们还需要添加一个下载功能:

@app.route('/download/<filename>')
def download_qr(filename):file_path = os.path.join(QR_IMAGES_DIR, filename)if os.path.exists(file_path):return send_file(file_path, as_attachment=True)else:return "文件不存在", 404

这段代码就像是给房子装了一个快递柜,用户只需要点一下按钮,就能把生成的二维码图片下载到自己的电脑上。

5. 启动应用

最后,我们需要写一行代码来启动这个应用:

if __name__ == '__main__':app.run(debug=True)

这行代码就像是按下了房子的电源开关,运行这行代码后,我们的二维码生成工具就开始工作啦!

四、制作网页界面

除了Python代码,我们还需要两个简单的HTML文件来制作网页界面:

1. 首页(index.html)

这个页面包含一个文本输入框和一个"生成二维码"按钮,设计得简洁明了:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>二维码生成工具</title><style>/* 这里是一些简单的样式代码 */</style>
</head>
<body><div class="container"><h1>二维码生成工具</h1>{% if error %}<div class="error">{{ error }}</div>{% endif %}<form action="/generate_qr" method="post"><div class="form-group"><label for="content">请输入要生成二维码的内容:</label><textarea id="content" name="content" placeholder="例如:网址、文本信息等..."></textarea></div><button type="submit">生成二维码</button></form><div class="tips"><p>✨ 提示:</p><ul><li>您可以输入网址、联系信息、文本等内容</li><li>生成的二维码将保存在本地并可以下载</li><li>扫描二维码即可查看您输入的内容</li></ul></div></div>
</body>
</html>

2. 结果页(result.html)

当用户生成二维码成功后,就会看到这个页面,它会显示生成的二维码图片,并提供下载按钮:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>二维码生成成功</title><style>/* 这里是一些简单的样式代码 */</style>
</head>
<body><div class="container"><h1>二维码生成成功!</h1><div class="qr-container"><img src="/download/{{ file_name }}" alt="生成的二维码" style="max-width: 100%; height: auto;"></div><div class="file-info">文件已保存至:{{ qr_image }}</div><div class="content-display"><div class="content-label">二维码内容:</div><div class="content-value">{{ content }}</div></div><div class="buttons"><a href="/download/{{ file_name }}" download><button class="download-btn">下载二维码</button></a><a href="/"><button class="new-btn">生成新的二维码</button></a></div><div class="info"><p>📱 扫描二维码即可查看您输入的内容</p><p>💾 二维码图片已自动保存到本地,您可以随时下载使用</p></div></div>
</body>
</html>

五、如何使用这个工具?

现在,让我们来看看如何使用这个工具吧!步骤非常简单:

1. 安装必要的库

首先,我们需要安装三个Python库:Flask、qrcode和Pillow。打开命令提示符,输入以下命令:

pip install flask qrcode Pillow

2. 运行应用

安装完成后,找到我们的qrcode_generator.py文件,在命令提示符中输入:

python qrcode_generator.py

运行成功后,你会看到类似这样的提示:

* Serving Flask app 'qrcode_generator'
* Debug mode: on
* Running on http://127.0.0.1:5000

3. 生成二维码

打开浏览器,输入http://127.0.0.1:5000,你就会看到我们的二维码生成工具的首页啦!在文本框里输入你想要生成二维码的内容(比如一个网址),然后点击"生成二维码"按钮,稍等片刻,你就能看到生成的二维码了!

4. 下载和使用二维码

在结果页面,你可以看到生成的二维码图片,点击"下载二维码"按钮,就可以把图片保存到你的电脑上。你还可以点击"生成新的二维码"按钮,继续生成其他内容的二维码。

六、这个工具在生活中的应用场景

这个二维码生成工具在生活和工作中有很多实用的场景:

  1. 分享联系方式:把你的微信、手机号等信息生成二维码,别人扫码就能添加你
  2. 制作活动物料:为活动链接、报名表单生成二维码,方便参与者扫码查看
  3. 分享文件:把网盘链接生成二维码,别人扫码就能下载文件
  4. 制作电子名片:把个人信息生成二维码,替代传统名片
  5. 产品推广:为产品介绍页、购买链接生成二维码,方便客户了解和购买

七、扩展小技巧

如果你想让这个工具更加强大,还可以尝试以下扩展功能:

  1. 自定义二维码颜色:修改代码中的fill_colorback_color参数,可以生成彩色的二维码
  2. 添加Logo:在二维码中间添加一个小Logo,让二维码更加个性化
  3. 调整二维码大小:修改代码中的box_size参数,可以调整二维码的大小
  4. 批量生成二维码:如果你需要生成多个二维码,可以编写一个批处理功能

八、常见问题解答

Q: 为什么生成的二维码扫描不出来?

A: 可能是输入的内容太长了,试试输入短一点的内容,或者调整二维码的纠错级别。

Q: 二维码图片保存在哪里?

A: 默认保存在运行程序的文件夹下的qr_images文件夹里。

Q: 可以在手机上使用这个工具吗?

A: 可以!只要在手机浏览器中输入电脑的IP地址和端口号,就可以在手机上使用这个工具了。

Q: 这个工具需要联网吗?

A: 不需要!这个工具是完全离线运行的,所有的二维码生成和保存都在你的电脑上完成。

九、完整代码

1、【后端代码】

from flask import Flask, render_template, request, send_file
import qrcode
import os
from datetime import datetime
import ioapp = Flask(__name__)# 确保保存图片的目录存在
QR_IMAGES_DIR = "qr_images"
if not os.path.exists(QR_IMAGES_DIR):os.makedirs(QR_IMAGES_DIR)@app.route('/')
def index():return render_template('index.html')@app.route('/generate_qr', methods=['POST'])
def generate_qr():# 获取用户输入的内容content = request.form.get('content', '')if not content:return render_template('index.html', error='请输入内容后再生成二维码')try:# 生成二维码qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=4,)qr.add_data(content)qr.make(fit=True)# 创建二维码图片img = qr.make_image(fill_color="black", back_color="white")# 生成唯一的文件名timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')file_name = f"qr_code_{timestamp}.png"file_path = os.path.join(QR_IMAGES_DIR, file_name)# 保存图片到本地img.save(file_path)# 将图片转换为字节流用于显示img_byte_arr = io.BytesIO()img.save(img_byte_arr, format='PNG')img_byte_arr.seek(0)# 返回结果页面,显示二维码return render_template('result.html', qr_image=file_path, content=content,file_name=file_name)except Exception as e:return render_template('index.html', error=f'生成二维码失败: {str(e)}')@app.route('/download/<filename>')
def download_qr(filename):file_path = os.path.join(QR_IMAGES_DIR, filename)if os.path.exists(file_path):return send_file(file_path, as_attachment=True)else:return "文件不存在", 404if __name__ == '__main__':app.run(debug=True)

2、【前端代码】

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>二维码生成工具</title><style>body {font-family: Arial, 'Microsoft YaHei', sans-serif;max-width: 600px;margin: 0 auto;padding: 20px;background-color: #f5f5f5;}.container {background-color: white;padding: 30px;border-radius: 8px;box-shadow: 0 2px 10px rgba(0,0,0,0.1);margin-top: 50px;}h1 {text-align: center;color: #333;}.form-group {margin-bottom: 20px;}label {display: block;margin-bottom: 5px;font-weight: bold;color: #555;}textarea {width: 100%;height: 100px;padding: 10px;border: 1px solid #ddd;border-radius: 4px;font-size: 16px;resize: vertical;}button {width: 100%;padding: 12px;background-color: #4CAF50;color: white;border: none;border-radius: 4px;font-size: 16px;cursor: pointer;}button:hover {background-color: #45a049;}.error {color: red;text-align: center;margin-bottom: 15px;}.tips {margin-top: 20px;padding: 15px;background-color: #f9f9f9;border-left: 4px solid #ccc;border-radius: 4px;}</style>
</head>
<body><div class="container"><h1>二维码生成工具</h1>{% if error %}<div class="error">{{ error }}</div>{% endif %}<form action="/generate_qr" method="post"><div class="form-group"><label for="content">请输入要生成二维码的内容:</label><textarea id="content" name="content" placeholder="例如:网址、文本信息等..."></textarea></div><button type="submit">生成二维码</button></form><div class="tips"><p>✨ 提示:</p><ul><li>您可以输入网址、联系信息、文本等内容</li><li>生成的二维码将保存在本地并可以下载</li><li>扫描二维码即可查看您输入的内容</li></ul></div></div>
</body>
</html>

十、总结

怎么样?这个二维码生成工具是不是很简单又实用呢?通过几行Python代码,我们就搭建了一个功能完整的Web应用,不仅能生成二维码,还能下载和保存图片。

如果你是编程小白,希望这篇文章能让你对Python和Web开发有一些初步的了解;如果你已经有一些编程基础,希望这个工具能给你一些启发,帮助你开发更多实用的小工具!

最后,如果你在使用过程中遇到任何问题,或者有更好的想法和建议,欢迎在评论区留言讨论哦!


小贴士:如果你想随时使用这个工具,可以把它做成一个可执行文件,双击就能运行,这样即使是不懂编程的朋友也能轻松使用啦!

喜欢这篇文章的话,别忘了点赞、收藏和分享哦!我们下期再见!👋


文章转载自:

http://grPd4IDY.fpkdd.cn
http://mLBwTVI4.fpkdd.cn
http://ojSglaYR.fpkdd.cn
http://5QIQD97L.fpkdd.cn
http://0aEEeCgM.fpkdd.cn
http://nfmFVoJo.fpkdd.cn
http://bPilEWl3.fpkdd.cn
http://dPKA16eM.fpkdd.cn
http://89ZAJQdR.fpkdd.cn
http://MGwYYuwe.fpkdd.cn
http://YOVWq5rM.fpkdd.cn
http://G5K8eJ0N.fpkdd.cn
http://52A6d70Q.fpkdd.cn
http://V0i8Ez8O.fpkdd.cn
http://gcLsFE9J.fpkdd.cn
http://BkbGQYkF.fpkdd.cn
http://Ur8LdKjQ.fpkdd.cn
http://hmtFdIpH.fpkdd.cn
http://SFlyXYD1.fpkdd.cn
http://DfxKWeBL.fpkdd.cn
http://D22Lb4pI.fpkdd.cn
http://Q6PA1Koy.fpkdd.cn
http://bDxngoaJ.fpkdd.cn
http://P0GZBtU3.fpkdd.cn
http://WW0zB76m.fpkdd.cn
http://HiRPjGrr.fpkdd.cn
http://ltIC3cMR.fpkdd.cn
http://ox3j2ySP.fpkdd.cn
http://EfmyBWbo.fpkdd.cn
http://jWxsfcxw.fpkdd.cn
http://www.dtcms.com/a/384281.html

相关文章:

  • 今天开始学习新内容“服务集群与自动化”--crond服务、--syslog服务以及DHCP协议
  • LeetCode 379 - 电话目录管理系统(Design Phone Directory)
  • 《Python 自动化实战:从零构建一个文件同步工具》
  • 风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具
  • Vue: 模板引用 (Template Refs)
  • Web2 vs Web3
  • 上海交大3D体素赋能具身导航!BeliefMapNav:基于3D体素信念图的零样本目标导航
  • SAP-ABAP:SAP ABAP中的JSON序列化利器:/UI2/CL_JSON=>SERIALIZE完全指南实例详解
  • stm32 can错误处理问题
  • python 自动化从入门到实战-开发一个随机点名系统(6)
  • 如何用 GitHub Actions 为 FastAPI 项目打造自动化测试流水线?
  • godot+visual studio配置c#环境
  • 文件查找失败:‘module‘ at node_modules\sass\sass.node.js:7
  • (一)Vue.js 框架简介
  • Vue 中在 Vue 项目中引入 Cesium 并加载本地离线地图
  • Node.js ≥ 18 安装教程
  • 第四阶段C#通讯开发-4:网络通讯_网络协议
  • 如何实现测试环境隔离临时数据库(pytest+SQLite)
  • 像连接mysql一样连接mongodb
  • 从零开始搞定C++类和对象(下)
  • 企业级实战:构建基于Qt、C++与YOLOv8的模块化工业视觉检测系统
  • TexturePacker 打包 TextAtlas:按顺序排列
  • MyBatis 核心概念与实践指南:从代理模式到性能优化
  • 全链路性能优化实战:从Jmeter压测到系统调优
  • 《华为变革法:打造可持续进步的组织》读书笔记
  • VS Code 通用配置分享(Cursor / QCode / Trae 通用)
  • python 自动化从入门到实战-word转为 PDF 文件(4)
  • Python爬虫实战:研究Pandas,构建地理信息数据采集和分析系统
  • 【Linux】进程概念(二):进程查看与 fork 初探
  • Python 自动化从入门到实战-一键将 Excel 表格转为 PDF 文件(3)