你好呀,我是博主Sakuraseven 。今天我们来点有趣的实战项目——用20行Python代码搭建一个属于自己的随机图片API!无论你是前端开发者需要测试素材,还是想给个人主页添加动态背景,这个小工具都能派上用场。

一、这个API能做什么?

先看效果:每次访问API地址,随机返回一张图片
https://your-api.com/random-img → 显示随机图片

应用场景

  • 前端占位图生成

  • 博客随机头图

  • 壁纸自动切换器

  • 开发测试数据源

二、准备工具(超简单!)

  1. Python 3.6+(官网下载)

  2. Flask框架(轻量级Web框架)

  3. 一个放图片的文件夹(建议使用无版权图片)

# 安装所需库 (命令行执行)
pip install flask

三、三步实现核心功能

步骤1:创建项目结构

/random-img-api
  ├── app.py          # 主程序
  ├── img_storage/    # 图片仓库(自己创建)
  │   ├── image1.jpg
  │   ├── image2.png
  │   └── ...

步骤2:编写核心代码 (app.py)

import os
import random
from flask import Flask, send_file

app = Flask(__name__)

# 配置图片文件夹路径
IMG_FOLDER = os.path.join(os.getcwd(), 'img_storage')

@app.route('/random-img')
def random_image():
    """随机图片API核心逻辑"""
    try:
        # 1. 获取所有图片文件
        valid_ext = ('.jpg', '.jpeg', '.png', '.gif', '.webp')
        images = [f for f in os.listdir(IMG_FOLDER) if f.lower().endswith(valid_ext)]
        
        # 2. 随机选择一张
        selected = random.choice(images)
        img_path = os.path.join(IMG_FOLDER, selected)
        
        # 3. 返回图片响应
        return send_file(img_path, mimetype='image/jpeg')
    
    except Exception as e:
        return f"Error: {str(e)}", 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

步骤3:启动服务

python app.py

访问测试地址:http://localhost:5000/random-img

四、进阶优化技巧

1. 安全增强版(防止目录遍历攻击)

# 在随机选择后添加路径安全检查
if not os.path.realpath(img_path).startswith(os.path.realpath(IMG_FOLDER)):
    return "Invalid request", 400

2. 添加缓存控制(减少服务器压力)

from flask import make_response

resp = make_response(send_file(img_path))
resp.headers.set('Cache-Control', 'max-age=3600')  # 缓存1小时
return resp

3. 支持指定尺寸(需安装PIL库)

# 示例:/random-img?w=800&h=600
from PIL import Image

def resize_image(img_path, width, height):
    img = Image.open(img_path)
    img = img.resize((width, height))
    # ... 返回处理后的图片

五、部署到生产环境

推荐方案:

  1. 云服务器 + Nginx反向代理

  2. Vercel/Heroku(免费方案可用)

  3. Serverless函数(AWS Lambda等)

# 简单Dockerfile示例
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

六、版权重要提示!

⚠️ 请务必遵守

  1. 使用自己拍摄/创作的图片

  2. 使用CC0等无版权图片(推荐网站):

    • Unsplash

    • Pexels

    • Pixabay

  3. 商业用途需额外授权

为什么做这个项目?

  1. 理解API工作原理:直观感受请求-响应流程

  2. 学习基础安全知识:路径安全/请求验证

  3. 低成本自建服务:摆脱第三方依赖

  4. 可无限扩展:后续可添加AI鉴黄、自动爬图等功能

技术栈选择原因
Flask框架轻量快速,适合小型API服务。如需高并发场景,可改用FastAPI或异步框架。


动手时间到! 如果你跟着教程成功搭建了自己的API,欢迎在评论区分享你的访问链接!遇到问题也尽管提问,我会尽力解答。

下一步计划

  • 教大家用React制作图片展示页面

  • 添加图片鉴黄功能(AI版)

  • 部署到Serverless的完整指南