
动手实现一个随机图片API:小白也能搞懂的教程
你好呀,我是博主Sakuraseven 。今天我们来点有趣的实战项目——用20行Python代码搭建一个属于自己的随机图片API!无论你是前端开发者需要测试素材,还是想给个人主页添加动态背景,这个小工具都能派上用场。
一、这个API能做什么?
先看效果:每次访问API地址,随机返回一张图片https://your-api.com/random-img
→ 显示随机图片
应用场景:
前端占位图生成
博客随机头图
壁纸自动切换器
开发测试数据源
二、准备工具(超简单!)
Python 3.6+(官网下载)
Flask框架(轻量级Web框架)
一个放图片的文件夹(建议使用无版权图片)
# 安装所需库 (命令行执行)
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))
# ... 返回处理后的图片
五、部署到生产环境
推荐方案:
云服务器 + Nginx反向代理
Vercel/Heroku(免费方案可用)
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"]
六、版权重要提示!
⚠️ 请务必遵守:
使用自己拍摄/创作的图片
使用CC0等无版权图片(推荐网站):
Unsplash
Pexels
Pixabay
商业用途需额外授权
为什么做这个项目?
理解API工作原理:直观感受请求-响应流程
学习基础安全知识:路径安全/请求验证
低成本自建服务:摆脱第三方依赖
可无限扩展:后续可添加AI鉴黄、自动爬图等功能
技术栈选择原因:
Flask框架轻量快速,适合小型API服务。如需高并发场景,可改用FastAPI或异步框架。
动手时间到! 如果你跟着教程成功搭建了自己的API,欢迎在评论区分享你的访问链接!遇到问题也尽管提问,我会尽力解答。
下一步计划:
教大家用React制作图片展示页面
添加图片鉴黄功能(AI版)
部署到Serverless的完整指南
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Sakuraseven!
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果