吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1070|回复: 0
收起左侧

[Python 原创] 基于FastApi制作的条码区间段生成web服务

[复制链接]
mengma 发表于 2024-8-23 15:10
本帖最后由 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运行成功
Snipaste_2024-08-23_15-02-13.png

使用postman发送请求
Snipaste_2024-08-23_15-06-50.png

生成的xlsx文件


Snipaste_2024-08-23_15-08-14.png

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
helian147 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表