基于Vercel和Flask部署API

项目地址:https://github.com/pwxiao/MyWords_API

引言

前段时间无意间发现了Vercel这个平台,它可以免费部署服务器和托管网站,与GithubPages只能托管静态网站不同,vercel可以部署的内容有很多,它支持python,go等多语言环境,这意味你可以创建动态的内容,甚至,你可以在上面部署一个深度学习模型。

简介

Vercel有一个Serverless Function 功能,翻译过来就是无服务器函数,因此,通过这个功能,我们可以在Vercel部署我们的api,我们今天这个项目就是基于Vercel部署的。

这个项目名字叫做MyWords_API,通过对服务器进行GET请求,你会得到随机返回的一个句子,重新请求,句子也会随之刷新。

为了更直观的体验,你可以点击https://api.pwxiao.top/

另外这个api还支持更多的功能,具体操作请查看项目的README.md文件。

开发过程中遇到的坑

多路由

我们可能会设置不同的路由已使用不同的api接口,但是官方的路由只支持对主页进行请求 ,对此我们只需要修改源代码中的vercel.json文件 将默认的vercel.json修改为

{
    "rewrites": [
        { "source": "/(.*)", "destination": "/api/app" }
    ]
}
destination中的app,为你创建的flask_app的名称,按需修改

文件读取

在函数如果涉及到文件读取,我试过通过文件的open()函数来读取,这种方法在本地调试时是可行的,但是部署到vercel端时会出现500错误,暂时不知错误的原因,解决办法就是通过部署到vercel的文件的网络路径,使用requests.get()获取源代码,这样也能获取到文件的内容

url=requests.get("https://api.pwxiao.top/sentences/category.json")
text = url.text
res = json.loads(text)

json返回中文乱码

在默认情况下,vercel会将内容转化为ASCII码输出,这样获取的内容只需要通过转码就可以了,但是在浏览器访问时不太美观,例如下面这样

{
    "id": 1082,
    "uuid": "ab89b12e-359b-4cfe-b50d-de35a20bf928",
    "hitokoto": "\u4f17\u91cc\u5bfb\u4ed6\u5343\u767e\u5ea6\uff0c\u84e6\u7136\u56de\u9996\uff0c\u90a3\u4eba\u5374\u5728\uff0c\u706f\u706b\u9611\u73ca\u5904\u3002",
    "type": "i",
    "from": "\u9752\u7389\u6848%b7\u5143\u5915",
    "from_who": null,
    "creator": "131",
    "creator_uid": 146,
    "reviewer": 0,
    "commit_from": "web",
    "created_at": "1481559051",
    "length": 24
}

我们需要他显示成这样

{
    "id": 1082,
    "uuid": "ab89b12e-359b-4cfe-b50d-de35a20bf928",
    "hitokoto": "众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。",
    "type": "i",
    "from": "青玉案·元夕",
    "from_who": null,
    "creator": "131",
    "creator_uid": 146,
    "reviewer": 0,
    "commit_from": "web",
    "created_at": "1481559051",
    "length": 24
  }

这时只需要将原内容进行一次json.dumps()转换并声明ensure_ascii=False

import json
fina_res = json.dumps(result,ensure_ascii=False)

API的使用与部署

该API分为两个功能

随机生成一句

请求地址:

https://api.pwxiao.top/

参数说明:https://api.pwxiao.top?catogory=

’Anime':动画,
'Comic':漫画,
'Game':游戏,
'Literature':文学,
'Original':原创,
'Internet':来源网络,
'Other':其他,
'Video':影视,
'Poem':古诗文,
'NCM':网易云,
'Philosophy':哲学,
'Funny':搞笑
数据库来自 一言数据库

返回值:

{
    "id": 1263,
    "uuid": "a58936ac-f3fb-4e5d-838e-a77a7219d1a4",
    "hitokoto": "渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。",
    "type": "i",
    "from": "滕王阁序",
    "from_who": null,
    "creator": "毛毛毛布斯",
    "creator_uid": 562,
    "reviewer": 0,
    "commit_from": "web",
    "created_at": "1507184994",
    "length": 24
  }

搜索古诗

请求地址:

https://api.pwxiao.top/search/

参数说明:https://api.pwxiao.top/search/?s=query

query为要搜索的内容
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以通过以下步骤在 Vercel部署 Flask用: 1. 确保你的 Flask 应用可以在本地正常运行,并且已经安装了必要的依赖。 2. 将你的 Flask 应用上传到一个版本控制系统(如 GitHub)。 3. 在 Vercel 上创建一个新项目。 4. 在 Vercel 的项目设置中,将你的版本控制系统与 Vercel 进行关联,以便自动部署。 5. 配置 Vercel 的构建设置,以告知 Vercel 如何构建和运行你的 Flask 应用。对于 Flask 应用,你可以使用 `vercel.json` 文件来定义构建和运行命令。例如,以下是一个示例的 `vercel.json` 文件: ```json { "version": 2, "builds": [ { "src": "app.py", "use": "@vercel/python" } ], "routes": [ { "src": "/(.*)", "dest": "/app.py" } ] } ``` 这个示例假设你的 Flask 应用的入口文件是 `app.py`。`builds` 部分告诉 Vercel 使用 `@vercel/python` 构建器来构建你的应用。`routes` 部分将所有请求重定向到 `app.py`。 6. 提交并推送你的代码更改到版本控制系统。 7. Vercel 将自动检测到你的代码更改,并在构建和部署过程中运行你的 Flask 应用。 8. 部署完成后,Vercel 将提供一个 URL,你可以访问该 URL 来查看部署Flask 应用。 这样,你的 Flask 应用就成功地部署Vercel 上了。请注意,Vercel 主要用于静态网站和前端应用的部署,对于需要长时间运行的后端应用,可能不是最佳选择。对于更复杂的后端应用,你可能需要考虑其他云平台,如 Heroku 或 AWS。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值