好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 mengma 于 2024-8-23 15:16 编辑
基于FastApi制作的条码区间段生成web服务
起因是工作中经常需要生成包含条码区间段的excel文件,正好最近在看fastapi的文档,为了练练手,于是决定最近动手写一个接口,来减少自己重复的劳动.
-
功能: 向对应的web服务发送包含一个条码区间段以及条码固定不变的部分的的post请求,服务端会根据需要返回一个每行包含一个条码的xlsx文件.
具体代码如下,因为本人没有写注释的习惯,注释是由ai生成的请见谅:
from fastapi import FastAPI, HTTPException
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
from openpyxl import Workbook
import io
app = FastAPI()
[i]# 定义输入数据的 Pydantic 模型
class BarcodeRequest(BaseModel):
prefix: str [i]# 前缀
start_barcode: str [i]# 起始条形码
end_barcode: str [i]# 结束条形码
step: int = 1 [i]# 步长,默认为1
fileName: str = "barCode" [i]# 文件名,默认为"barCode"
[i]# 生成带有指定步长的条形码范围
def generate_barcode_range(prefix: str, start: str, end: str, step: int):
start_numeric = int(start) [i]# 将起始条形码转换为整数
end_numeric = int(end) [i]# 将结束条形码转换为整数
[i]# 验证起始条形码不大于结束条形码
if start_numeric > end_numeric:
raise ValueError("起始条形码必须小于或等于结束条形码")
[i]# 验证步长为正整数
if step <= 0:
raise ValueError("步长必须为正整数")
[i]# 生成条形码列表
barcodes = [
f"{prefix}{str(i).zfill(len(start))}" [i]# 保留起始条形码的位数
for i in range(start_numeric, end_numeric + 1, step)
return barcodes
[i]# POST 请求处理函数,用于生成条形码Excel文件
@app.post("/generate-barcode-xlsx/")
async def generate_barcode_xlsx(request: BarcodeRequest):
try:
[i]# 生成条形码范围
barcodes = generate_barcode_range(
request.prefix, request.start_barcode, request.end_barcode, request.step
)
[i]# 创建Excel工作簿和工作表
wb = Workbook()
ws = wb.active
[i]# 写入标题
ws["A1" = "WAFERNO"
[i]# 写入条形码到Excel表格中
for idx, barcode in enumerate(barcodes, start=2):
ws[f"A{idx}" = barcode
[i]# 保存工作簿到字节缓冲区
buffer = io.BytesIO()
wb.save(buffer)
buffer.seek(0)
[i]# 返回Excel文件作为响应
response = StreamingResponse(
buffer,
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
response.headers["Content-Disposition" = (
f"attachment; filename={request.fileName}.xlsx"
)
return response
except ValueError as ve:
[i]# 处理ValueError异常,并返回HTTP 400错误
raise HTTPException(status_code=400, detail=str(ve))
-
使用方法: 可以使用ide或者打包在服务器上运行这段代码,运行一个web服务,然后向其发送post请求便会返回xlsx文件.
使用pycharm运行成功
使用postman发送请求
生成的xlsx文件
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|