ErikTse Runtime

  • 首页 / Home
  • | 算法学习 / Algorithm
    • 所有 / All
    • 简单 / Easy
    • 中等 / Medium
    • 困难 / Hard
  • | 技术分享 / Technology
    • 所有 / All
    • 网络技术 / NetWork
    • 资源共享 / Resource
    • 项目实践 / Event
Keep Going.
温故而知新.
  1. 首页
  2. 技术分享
  3. 正文

【python网络编程项目实践】1.用fastapi编写一个随机动漫图片的api

2023年2月26日 84点热度 0人点赞 2条评论

先放演示地址: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])

测试

下面两个链接分别可以得到图片和地址:

pic.eriktse.com:25588/image

pic.eriktse.com:25588/path

最后

用fastapi搭建api的方式,与主流的php搭建api的方式不同,php搭建更轻便且无需运行python,虚拟主机即可实现,这个仅做学习。

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: fastapi http python 网络技术 随机图片api
最后更新:2023年2月26日

Eriktse

19岁,性别未知,ACM-ICPC现役选手,ICPC亚洲区域赛银牌选手,CCPC某省赛铜牌蒟蒻,武汉某院校计算机科学与技术专业本科在读。

点赞
< 上一篇
下一篇 >

文章评论

  • 懒西鱼

    你能不能给你的博客加一个blank不然回去查看还得要退回

    2023年2月26日
    回复
    • Eriktse

      @懒西鱼 我不会

      2023年2月27日
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    订阅本站
    Loading
    文章目录
    • 搭建开发环境
    • 编写python代码
    • 测试
    • 最后

    COPYRIGHT © 2022 ErikTse Runtime. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    赣ICP备2022001555号-1

    赣公网安备 36092402000057号