一、简介
1. FastAPI 概述
FastAPI 是一款现代、轻量、高性能的 Python Web 框架,专门用来快速构建 API(应用程序编程接口)。它是近几年 Python 生态中最火的 Web 框架之一,尤其适合快速上手写后端接口。
2. FastAPI 适用场景
- 前后端分离项目的后端 API;
- 微服务间的接口;
- 数据接口(如提供数据库商品信息);
- 快速原型开发。
本文通过 FastAPI 构建后端服务,结合 Python requests 库模拟前端客户端,实现了用户注册、登录及信息查看功能。教程详细解析了 HTTP 请求原理、URL 参数传递、数据校验逻辑及前后端交互流程,包含完整的代码示例与运行说明,适合初学者理解 Web API 开发基础。
FastAPI 是一款现代、轻量、高性能的 Python Web 框架,专门用来快速构建 API(应用程序编程接口)。它是近几年 Python 生态中最火的 Web 框架之一,尤其适合快速上手写后端接口。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
作为初学者,刚接触前后端交互时容易对概念感到困惑。本文将结合实战代码,解析 FastAPI 接口编写、requests 库使用及 Request 对象原理,帮助你理解前后端交互的底层逻辑。
可以用餐厅点餐来比喻:
Python 前端脚本相当于'顾客',FastAPI 后端相当于'厨房',两者靠 HTTP 协议传递数据。
使用 FastAPI 实现以下功能:
本项目采用'FastAPI 后端接口服务 + Python 命令行前端客户端'组合。
前端主要使用 requests 库发送 HTTP 请求。
import requests
requests 是 Python 生态中最常用的 HTTP 请求库,它将用户的操作转换成后端能识别的 HTTP 请求,并带回响应结果。
while True:
user_input = input('1、注册\n2、登录\n3、查看\n4、退出\n请输入你要进行的操作:')
if user_input == '1':
user = input("用户名:")
password = input("密码:")
res = requests.post("http://127.0.0.1:8000/user/register", params={"username": user, "password": password})
result = res.json()
print(f'{result["result"]}')
elif user_input == '2':
user = input("用户名:")
password = input("密码:")
res = requests.post("http://127.0.0.1:8000/user/login", params={"username": user, "password": password})
result = res.json()
print(f'{result["result"]}')
elif user_input == '3':
res = requests.post("http://127.0.0.1:8000/user/logout")
result = res.json()
print(result)
elif user_input == '4':
break
else:
print("输入的操作错误请重新输入")
while True:创建无限循环,直到用户选择退出。input(...):打印菜单等待用户输入。requests.post:发送 POST 请求到后端接口。params:将字典转换为 URL 查询参数拼接到地址后。res.json():将 JSON 格式字符串转换为 Python 字典。注意:requests.post 返回的是 Response 对象,直接打印会显示 <Response [状态码]>。需使用 .json() 或 .text 解析内容。
后端核心定位是提供数据处理接口,维护用户数据并校验业务规则。
import uvicorn
from fastapi import FastAPI, Request
import re
app = FastAPI()
user_datas = [{"username": "admin123", "password": "admin_123"}]
def judgment(username, password):
# 条件:用户名长度>6,密码长度>=9,含数字/字母/下划线,无非法字符
if len(username) > 6 and re.match(r'^(?=.*\d)(?=.*[a-zA-Z])(?=.*_)[a-zA-Z0-9_]{9,}$', password):
return 1
else:
return 0
@app.post('/user/register')
def register(request: Request):
username = request.query_params['username']
password = request.query_params['password']
for i in user_datas:
if i['username'] == username:
return {"result": "注册失败:用户名重复"}
if judgment(username, password):
user_data = {"username": username, "password": password}
user_datas.append(user_data)
print(user_datas)
return {"result": f"注册成功:{username}成功注册"}
else:
return {"result": "注册失败:注册的用户名和密码未满足要求"}
@app.post('/user/login')
def login(request: Request):
username = request.query_params['username']
password = request.query_params['password']
if judgment(username, password):
for i in user_datas:
if i['username'] == username and i['password'] == password:
return {'result': f"登录成功:{username}欢迎"}
return {"result": "登录失败:用户名或密码错误"}
else:
return {'result': '登录失败:用户名或密码输入不正确'}
@app.post('/user/logout')
def logout():
return user_datas
if __name__ == '__main__':
uvicorn.run("main:app", host="127.0.0.1", port=8000)
import uvicorn:导入 ASGI 服务器,用于监听网络请求。@app.post:装饰器,定义路由路径和请求方法。request.query_params:获取 URL 中的查询参数。uvicorn.run:启动服务,绑定 IP 和端口。在 PyCharm 中创建两个 .py 文件:main.py(后端)和 test.py(前端)。
见上文'后端代码设计思路'部分。 运行流程:导入模块 -> 创建 app 实例 -> 初始化模拟数据库 -> 定义校验函数 -> 启动 Uvicorn 监听 8000 端口。
见上文'前端代码设计思路'部分。 运行流程:导入 requests -> 进入 while 循环 -> 打印菜单 -> 接收指令 -> 发送请求 -> 解析响应。
res.json() 将 JSON 字符串反序列化为 Python 字典或列表。