使用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 ...
随机推荐
- cmake 简易教程
CMake 是一个跨平台的.开源的构建工具.cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量,目前很多开源的 ...
- Kubernetes数据存储-本地存储
简单存储 EmptyDir EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录. EmptyDir是在Pod被分配到Node时创建的,它的初始内容为空,并且无须 ...
- 你应该懂的AI大模型(六)之 transformers
一.Transformer与transformers 结论:Transformer是模型架构,transfortmers是库. 问:为什么我们要知道Transformer与transformers呢? ...
- Mysql建表注意点
库名.表名.字段名必须使用小写字母,"_"分割.
- 从Multirepo到Monorepo 袋鼠云数栈前端研发效率提升探索之路
一.困境频生 前端代码管理何解? 前端代码管理一直是困扰不少前端开发团队的难题,从开发到发布的整体工作流程中,除了常规的技术问题外,往往还伴随着沟通成本.维护成本及协作效率等问题.这些问题在团队规模较 ...
- DTALK直播预约 | 12月8日开播:后疫情时代,制造企业如何实现数字化转型?
我国制造业拥有31个大类.179个中类和609个小类,是全球产业门类最齐全.产业体系最完整的制造业.二十大报告中强调:"坚持把发展经济的着力点放在实体经济上""推动制造业 ...
- 赴一场开源盛会丨10月29日 COSCon'22 开源年会杭州分会场,这里只差一个「你」!
报名地址:https://www.bagevent.com/event/8322877 2022年,世界正在改变,开源创造价值.已经办到第七届的开源年会首次来到杭州与开发者们相聚.你眼中的开源是怎样的 ...
- Potree 004 点云点大小形状设置
点云数据就是靠海量的点显示来模拟真实世界的.点大小设置就比较重要,例如如果数据稀疏,点显示的时候,可以设置稍微大一些.如果点数据比较密集,则可以显示小一些. 在Potree中,点云定义为PointCl ...
- window10本地搭建DeepSeek R1(一)
本章介绍在window上部署 DeepSeek R1-8B + Open WebUI :需要安装的有:Ollama,python 3.11,DeepSeek ,Open WebUI. 一:环境:我的w ...
- C# WinForm NumericUpDown 控件全选其中文字 (Numeric 全选文本) 全选文本Numeric
num_length.Focus(); UpDownBase updbText = (UpDownBase)num_length; ...