先放演示地址:pic.eriktse.com:25588/image
搭建开发环境
我用的服务器是腾讯云的一台Ubuntu20.04服务器,计划用Python语言编写,用Anaconda配置环境,然后安装fastapi,uvicorn等库进行api开发。
搭建环境这块就不多说了,可以看以前的文章《Anaconda入门学习笔记(1):在windows下安装Anaconda》和《Anaconda学习笔记(2):在Ubuntu下安装和使用Anaconda》。
选择一个喜欢的文件夹进行开发,我选择的是"/home/picapi",尽量在home目录下写自己的东西。
编写python代码
代码只要一个主文件就够了,毕竟是一个很简单的项目。
主要的想法就是,接收到get请求,就返回一张图片就好了,这里不做复杂的分析,不做图片分类的功能,仅仅是随机返回一张图片。
先把下面这一坨模板写上:
from fastapi import FastAPI from fastapi import Response from fastapi.responses import RedirectResponse import uvicorn from starlette.middleware.cors import CORSMiddleware app = FastAPI(title="ERIKTSE_PICAPI", version="1.0.0") # 添加跨域中间件 app.add_middleware( CORSMiddleware, allow_origins=["*"], # 访问来源 allow_credentials=True, # 用户凭据 allow_methods=["*"], # 允许请求方法 allow_headers=['*'], # 允许请求头 ) if __name__ == '__main__' : uvicorn.run(app, host="0.0.0.0", port=25588)
接下来完善get_image()这个函数,我们会得到一个图片地址然后重定向过去,这需要我们有一个地址库。
我这里准备了5张图片的网络地址,为了方便演示,直接存入一个数组中,我的想法是调用到api后就重定向到一个随机的图片地址去。
list = ['https://img.xjh.me/img/61324334_p0.jpg', 'https://img.xjh.me/img/63105666_p0.jpg', 'https://img.xjh.me/img/65081874_p0.jpg', 'https://img.xjh.me/img/63866864_p0.jpg', 'https://img.xjh.me/img/58995100_p0.jpg']
当数据量较大时,应该用文本存储或数据库存储。
可以利用python的random库中的randint函数,生成一个随机数,用于选取数组中的元素。
于是可以有这一段:
@app.get("/image") async def get_image(): k = random.randint(0, len(list) - 1) return RedirectResponse(list[k])
当然你也可以直接返回图片的地址,用PlainTextResponse可以避免出现字符串两边的引号:
@app.get("/path") async def getpath(): k = random.randint(0, len(list) - 1) return PlainTextResponse(list[k])
测试
下面两个链接分别可以得到图片和地址:
最后
用fastapi搭建api的方式,与主流的php搭建api的方式不同,php搭建更轻便且无需运行python,虚拟主机即可实现,这个仅做学习。
Comments 2 条评论
你能不能给你的博客加一个blank不然回去查看还得要退回
@懒西鱼 我不会