使用FastApi构建python后端,并部署在免费服务器Render/Replit上

本文仅作本人初学后端教程笔记,实现了使用python写一个简单的查询、带参数查询、上传图片并返回图片参数、模拟登录的api。实现好之后可以在本地测试,亦或部署在免费服务器比如Render/Replit。
本文共 940 字,阅读时间大约5分钟,上手操作时间约30-60分钟。
本文的撰写离不开ChatGPT 4o的帮助,我也是从0后端基础开始的。

1.使用FastApi编写api

🚀 为什么用 FastAPI 更合适?

/* by 01022.hk - online tools website : 01022.hk/zh/androidmanifest.html */
写接口更快,更强类型,更现代化

文档自动生成,无需额外工具

性能超高,生产级别部署没压力

未来你要对接前端、移动端、别的系统,直接/docs 就能用!

首先我们先用FastApi写

  1. 最简单的查询,不带任何参数。比如get-time,发送请求,服务器返回服务器的时间。
  2. 带参数的查询,带一个参数传入。比如get-temperature,需要传入city参数。
  3. 带有附件的post提交,比如get-image-info,需要传入本地的图片,返回服务器处理后的数据。
  4. 模拟登录,比如login,输入用户名密码,返回登陆的信息。
/* by 01022.hk - online tools website : 01022.hk/zh/androidmanifest.html */
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上新建一个仓库,上传刚才的代码。
image

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

image
选择后点击导入即可。

image

Replit会自动识别启动命令,确认。
然后点击最上面的Run即可运行。

4. 测试API

部署好运行之后即可测试api。在地址栏输入api
image
这个面板无法测试比如上传附件的post,那么可以用postman测试。
这个时候就需要一个临时的外网地址。点击地址栏左侧的复制地址按钮
image
在弹出的界面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:选择一张本地图片文件
image

5. render.com也可以

https://render.com/



作者:猫叔Vincent
    
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高发微服务系统的构建能力。
数字图像隐写术是一种将秘密信息嵌入到数字图像中的技术,它通过利用人类视觉系统的局限性,在保持图像视觉质量的同时隐藏信息。这项技术广泛应用于信息安全、数字水印和隐蔽通信等领域。 典型隐写技术主要分为以下几类: 空间域隐写:直接在图像的像素值中进行修改,例如LSB(最低有效位)替换方法。这种技术简单易行,但对图像处理操作敏感,容易被检测到。 变换域隐写:先将图像转换到频域(如DCT或DWT域),然后在变换系数中嵌入信息。这类方法通常具有更好的鲁棒性,能抵抗一定程度的图像处理操作。 自适应隐写:根据图像的局部特性动态调整嵌入策略,使得隐写痕迹更加分散和自然,提高了安全性。 隐写分析技术则致力于检测图像中是否存在隐藏信息,主要包括以下方法: 统计分析方法:检测图像统计特性的异常,如直方图分析、卡方检测等。 机器学习方法:利用分类器(如SVM、CNN)学习隐写图像的区分特征。 深度学习方法:通过深度神经网络自动提取隐写相关特征,实现端到端的检测。 信息提取过程需要密钥或特定算法,通常包括定位嵌入位置、提取比特流和重组信息等步骤。有效的隐写系统需要在容量、不可见性和鲁棒性之间取得平衡。 随着深度学习的发展,隐写与反隐写的技术对抗正在不断升级,推动了这一领域的持续创新。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值