使用FastApi构建python后端,并部署在免费服务器Render/Replit上
本文仅作本人初学后端教程笔记,实现了使用python写一个简单的查询、带参数查询、上传图片并返回图片参数、模拟登录的api。实现好之后可以在本地测试,亦或部署在免费服务器比如Render/Replit。
本文共 940 字,阅读时间大约5分钟,上手操作时间约30-60分钟。
本文的撰写离不开ChatGPT 4o的帮助,我也是从0后端基础开始的。
1.使用FastApi编写api
为什么用 FastAPI 更合适?
写接口更快,更强类型,更现代化
文档自动生成,无需额外工具
性能超高,生产级别部署没压力
未来你要对接前端、移动端、别的系统,直接/docs 就能用!
首先我们先用FastApi写
- 最简单的查询,不带任何参数。比如get-time,发送请求,服务器返回服务器的时间。
- 带参数的查询,带一个参数传入。比如get-temperature,需要传入city参数。
- 带有附件的post提交,比如get-image-info,需要传入本地的图片,返回服务器处理后的数据。
- 模拟登录,比如login,输入用户名密码,返回登陆的信息。
from fastapi import FastAPI, Query, File, UploadFile, Form, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import random
from datetime import datetime
from PIL import Image
import io
from pydantic import BaseModel
import uvicorn
app = FastAPI()
if __name__ == '__main__':
uvicorn.run("main:app", host="0.0.0.0", port=5000, reload=True)
# 可选:允许跨域(前端访问用)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 或指定你的前端域名
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/get-time")
def get_temperature():
timestamp = datetime.now().isoformat()
return{
"timestamp": timestamp
}
@app.get("/get-temperature")
def get_temperature(city: str = Query(..., description="城市名称")):
temperature = round(random.uniform(32, 36.5), 2)
timestamp = datetime.now().isoformat()
return{
"city": city,
"temperature": temperature,
"timestamp": timestamp
}
@app.post("/get-image-info")
async def get_image_info(file: UploadFile = File(...)):
contents = await file.read()
try:
# 使用 PIL 解析图片尺寸
image = Image.open(io.BytesIO(contents))
width, height = image.size
return {
"filename": file.filename,
"width": width,
"height": height
}
except Exception as e:
return {
"error": "无法识别图片",
"detail": str(e)
}
# 模拟数据库中的用户信息(实际应查数据库)
fake_user_db = {
"vincent": {
"username": "vincent",
"password": "123456", # 实际应加密存储
"full_name": "Vincent Wang"
}
}
# 登录返回模型
class LoginResponse(BaseModel):
message: str
token: str = None
full_name: str = None
@app.post("/login", response_model=LoginResponse)
async def login(username: str = Form(...), password: str = Form(...)):
user = fake_user_db.get(username)
if not user or user["password"] != password:
raise HTTPException(status_code=401, detail="用户名或密码错误")
# 模拟生成 token(实际应用 JWT 等)
token = f"token-{username}"
return {
"message": "登录成功",
"token": token,
"full_name": user["full_name"]
}
2. 上传代码到Github
在Github上新建一个仓库,上传刚才的代码。

- 注册使用replit免费服务器
登录https://replit.com/注册账号,点击左上角Import code or design,

选择Github源


选择后点击导入即可。

Replit会自动识别启动命令,确认。
然后点击最上面的Run即可运行。
4. 测试API
部署好运行之后即可测试api。在地址栏输入api

这个面板无法测试比如上传附件的post,那么可以用postman测试。
这个时候就需要一个临时的外网地址。点击地址栏左侧的复制地址按钮

在弹出的界面copy dev接口地址。
打开 Postman,新建一个请求。
请求方法选择:POST
请求 URL 填写:
https://9a094bdd-2c2b-4380-b7b5-b296f117cd48-00-3b1dquurmhoxv.janeway.replit.dev/
切换到 Body 标签页,选择 form-data。
在下面的表格里添加一个参数:
Key:file(必须和你 FastAPI 里函数参数名一致)
Type:选择 File
Value:选择一张本地图片文件

5. render.com也可以
使用FastApi构建python后端,并部署在免费服务器Render/Replit上的更多相关文章
- 将你的Python Web程序部署到Ubuntu服务器上
在本文记录了我在Ubuntu中部署Flask Web站点的过程, 其中包括用户创建.代码获取.Python3环境的安装.虚拟环境设置.uWSGI启动程序设置,并将Nginx作为前端反向代理.希望对各位 ...
- 程序windows上可以上传附件,部署到 linux服务器后出现 “上传目录 不可写” 怎么解决?
这样的问题一般都是linux 下文件读写权限引起的,用 shell 命名到上传附件的目录(如 cd /data/www/project/upload/),然后执行 shell 文件权限设置: 例如 ...
- 如何使用Dockerfile构建Tomcat镜像并部署war
我们都知道Docker构建一个镜像有两种方式: 使用`docker commit`命令 使用`Dockerfile`文件和`docker build`命令 那么这两种方式有何区别呢? 相同点:底层实现 ...
- 全面解读Python Web开发框架Django,利用Django构建web应用及其部署
全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...
- Python后端开发要求
关于Python后端开发要求 一.对Python有兴趣,熟悉Python(标准库) 最好阅读过源码 了解Python的优化(熟悉pypy更佳) 二.至少至少一门语言(不说"精通") ...
- Linux--前后端分离部署
项目部署 (vue + nginx + uwsgi + django + mysql + redis) 一 . 前端部署 1. 下载vue代码,解压缩 wget https://files.cnblo ...
- Jenkins之使用Pyinstaller构建Python应用程序
目录 1. 极简概述 2. Jenkins配置 2.1 安装JDK 2.2 安装Jenkins 3. 安装Docker 4. 使用PyInstaller构建Python应用程序 4.1 Fork 一个 ...
- Flask & Vue 构建前后端分离的应用
Flask & Vue 构建前后端分离的应用 最近在使用 Flask 制作基于 HTML5 的桌面应用,前面写过<用 Python 构建 web 应用>,借助于完善的 Flask ...
- Jenkins持续构建打包后端服务流程详解
背景运用场景及思路 1.为响应后端开发人员需求,提升项目开发过程效率,选择Jenkins持续构建,进行导包启动一键持续集成 思路: 使用jenkins自带,立即构建->SVN拉取代码,通过Jen ...
- 用Buildout来构建Python项目
用Buildout来构建Python项目 什么是Buildout (Remixed by Matt Hamilton, original from http://xkcd.com/303) Bui ...
随机推荐
- Fiddler抓包工具安装HTTPS证书
安装好之后,打开Fiddler根目录,打开CMD 执行以下内容 makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NO ...
- python爬虫学习——re模块(正则表达式)
正则表达式常用操作符 . 任何单个字符 [] 字符集,对单个字符给出取值范围 [abc].[a-z] [^ ] 非字符集,对单个字符给出排除范围 [^abc] * 对前一个字符0次或无限次拓展 abc ...
- kubernetes网络组件calico详解
一.Calico介绍 Calico是一种容器之间互通的网络方案,在虚拟化平台中,比如OpenStack.Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Inte ...
- 重要通知:spring-ai-hunyuan 已兼容 Spring AI 稳定版!
最近有小伙伴在使用 mvn 仓库中的 1.0.0-M6 版本时,已经遇到一些兼容性问题和未知异常.本着更好地维护 spring-ai-hunyuan 仓库,我这几天熬夜更新并整理了对 Spring A ...
- Office 2024 专业增强版超详细下载安装教程(附安装包)
目录 一.Office 2024 专业增强版软件简介 二.Office 2024 专业增强版安装准备 三.Office 2024 专业增强版安装步骤 下载Office 2024安装包: 运行Offic ...
- Spring 6
一.基础 1.什么是反射 在Java中,反射是指在运行时检查和操作类.接口.字段和方法等程序结构的能力. 通过反射,你可以在运行时动态获取类的信息.实例化对象.访问和修改字段.调用方法, 以及构造新的 ...
- Luogu P9671 [ICPC2022 Jinan R] Identical Parity 题解
P9671 [ICPC2022 Jinan R] Identical Parity 构造题.感觉中上位黄. 对于 \(k\) 为偶数的情况,构造奇偶交替的序列.每次区间向后挪动时,最左边出去的元素和最 ...
- cmake 文档连接
简介 https://cmake.org/cmake/help 用作留存
- linux chmod 修改移动硬盘无效
转载 http://blog.csdn.net/lanyang123456/article/details/47683351 linux 下挂载windows ntfs 硬盘,采用开机挂载,修改/et ...
- SciTech-Mathmatics-Proba. & Stats.: {先验概率, 联合概率, 条件概率, 全概率, 似然度, 后验概率}
SciTech-Mathmatics-Proba. & Stats.: P(AB) VS P(B|A) VS P(A|B) 先给结论: 联合概率讨论的是"不相关事件"的概率 ...