我在try 使用部署在Vercel中的Flaskapp时遇到问题. 这是一个小程序,它会返回一个徽章,其中包含GitHub回购的明星数量.

Py(位于"DynamicBadges"中)

import requests
from flask import Flask, Response

app = Flask(__name__, template_folder='dynamicBadges/templateFiles', static_folder='dynamicBadges/staticFiles')

# VARIANT 1 ----------------------------------------------------------------
variant_1 = ['#B02E26', '#974800', '#8E7500', '3F6900', '#4B6700', '#00696A', '#4B53B9', '#006493', '#8A33B8', '#9E2A99', '#99405E', '#1B1B1B']
on_variant_1 = '#FFF'

# VARIANT 2 ----------------------------------------------------------------
variant_2 = ['#FFB4AA', '#FFB689', '#E9C327', '#92DA35', '#AFD364', '#4CDADB', '#BEC2FF', '#8DCDFF', '#E8B3FF', '#FFABF1', '#FFB1C5', '#C6C6C6']
on_variant_2 = ['#690004', '#512400', '#3B2F00', '#1F3700', '#253600', '#003737', '#181F89', '#00344F', '#500075', '#5C005A', '#5E1130', '#303030']

# VARIANT 3 ----------------------------------------------------------------
variant_3 = ['#FFDAD5', '#FFDBC7', '#FFE177', '#ACF850', '#CAF07D', '#6FF6F7', '#E0E0FF', '#CAE6FF', '#F6D9FF', '#FFD7F4', '#FFD9E1', '#E2E2E2']
on_variant_3 = ['#410001', '#311300', '#231B00', '#102000', '#141F00', '#002020', '#00036B', '#001E30', '#310049', '#380037', '#3F001B', '#1B1B1B']

@app.route('/badge/stars/<style>/<variant>/<username>/<repo>')
def github_stars_badge(style, variant, username, repo):
    url = f'https://api.github.com/repos/{username}/{repo}'
    headers = {'Accept': 'application/vnd.github.v3+json'}
    r = requests.get(url, headers=headers)
    if r.ok:
        index = int(style) - 1

        if variant == '1':
            background = variant_1[index]
            foreground = on_variant_1
        if variant == '2':
            background = variant_2[index]
            foreground = on_variant_2[index]
        if variant == '3':
            background = variant_3[index]
            foreground = on_variant_3[index]

        data = r.json()
        stars = data['stargazers_count']

        if len(str(stars)) == 1:
            width = 20 + 68
        elif len(str(stars)) == 2:
            width = 2 * 16 + 68
        elif len(str(stars)) == 3:
            width = 3 * 14 + 68
        elif len(str(stars)) == 4:
            width = 4 * 13 + 68
        else:
            width = len(str(stars)) * 13 + 68
        
        svg = f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="30" fill="{background}" rx="15"><path d="M40 0h4v20h-4z" fill="#4c1"/><rect rx="15" width="{width}" height="30" fill="{background}"/><text x="11" y="22" fill="{foreground}" font-size="20" font-family="Product Sans">Stars : {stars}</text></svg>'
        return Response(svg, mimetype='image/svg+xml')
    else:
        return 'Error', r.status_code

Json(位于项目根目录中)

{
    "version": 2,
    "builds": [
    {
        "src": "dynamicBadges",
        "use": "@vercel/python",
        "config": {
        "maxLambdaSize": "15mb"
        }
    }
    ],
    "routes": [
    {
        "src": "/badge/stars/(.*)/(.*)/(.*)/(.*)",
        "dest": "dynamicBadges/main.py"
    }
    ]
}

Requirements.txt(Idem)

Flask==2.3.2

Error

error

What I should get

大概是这样的: expecting

(但在这种情况下,是GitHub上的VsCode repo拥有的明星数量)

谢谢.

推荐答案

dynamicBadges的目录 struct :

.
├── main.py
├── requirements.txt
└── vercel.json

第一个补丁是requirements s.txt.requests不是Python标准库的一部分,因此必须包括在内.Requirements s.txt应该如下所示:

blinker==1.6.2
certifi==2023.5.7
charset-normalizer==3.1.0
click==8.1.3
colorama==0.4.6
Flask==2.3.2
idna==3.4
importlib-metadata==6.7.0
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
requests==2.31.0
urllib3==2.0.3
Werkzeug==2.3.6
zipp==3.15.0

第二个修复是vercel.json配置.使用以下配置:

{
"version": 2,
"builds": [
    {
        "src": "main.py",
        "use": "@vercel/python"
    }
],
"routes": [
    {
        "src": "(.*)",
        "dest": "main.py"
    }
]}

指向示例部署的链接: https://badges-vercel.vercel.app/badge/stars/1/1/microsoft/vscode

Screenshot of Solution: enter image description here

Python相关问答推荐

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

Python -根据另一个数据框中的列编辑和替换数据框中的列值

Pydantic 2.7.0模型接受字符串日期时间或无

替换字符串中的多个重叠子字符串

输出中带有南的亚麻神经网络

什么相当于pytorch中的numpy累积ufunc

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

Python解析整数格式说明符的规则?

如何将多进程池声明为变量并将其导入到另一个Python文件

迭代嵌套字典的值

如何在FastAPI中为我上传的json文件提供索引ID?

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

如何在BeautifulSoup/CSS Select 器中处理regex?

搜索按钮不工作,Python tkinter

当条件满足时停止ODE集成?

计算机找不到已安装的库'

如何使用大量常量优化代码?

如何在Quarto中的标题页之前创建序言页

Django更新视图未更新