02. 零基础小白直接上手FastAPI
Pyhton 菜鸟教程

FastAPI 是一个比较新的 Python 的 Web 框架
管理系统、网站、数据分析需要展示
环境要求
python 版本:3.12
Pycharm 2024.1
MySQL8.0
Navicat17
建议使用 exe 安装 python
https://www.python.org/ftp/python/3.12.10/python-3.12.10-amd64.exe
Mysql 安装:https://dev.mysql.com/downloads/installer/
配置 pip
%AppData% 新建 pip 文件夹 再新建一个 pip.ini 文件
[global]
index-url = http://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
**pip config list ** 查看本地配置的镜像
新建项目
项目名称是 fastapi-app,注意放在外层目录里面


打开外层的目录,标识 fastapi-app 为源码目录

Http 的请求类型
查询:get
新增:ppost
修改:put
删除:delete
创建数据库和表
数据库:fastapi_vue3
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学号',
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
`clazz` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '班级',
`major` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '专业',
`college` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学院',
`phone` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机',
`email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
`address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生信息';
INSERT INTO `fastapi_vue3`.`student` (`id`, `no`, `name`, `clazz`, `major`, `college`, `phone`, `email`, `address`) VALUES (1, '20231001', '青哥哥', '计科1班', '计算机科学与技术', '计算机学院', '13699885599', 'qgg@163.com', '安徽合肥');
INSERT INTO `fastapi_vue3`.`student` (`id`, `no`, `name`, `clazz`, `major`, `college`, `phone`, `email`, `address`) VALUES (2, '20231002', '小林', '计科2班', '计算机科学与技术', '计算机学院', '13588557788', 'xiaolin@163.com', '江苏南京');
INSERT INTO `fastapi_vue3`.`student` (`id`, `no`, `name`, `clazz`, `major`, `college`, `phone`, `email`, `address`) VALUES (3, '20231003', '小王', '计科3班', '计算机科学与技术', '计算机学院', '13577998822', 'xiaow@163.com', '河南郑州');
项目依赖
requirement.txt
fastapi
uvicorn
tortoise-orm # 需要单独安装
aiomysql # 需要单独安装
安装:
pip install tortoise-orm
pip install aiomysql
数据库配置 setings.py
TORTOISE_ORM = {
"connections": {
"default": {
"engine": "tortoise.backends.mysql",
"credentials": {
"host": "localhost",
"port": 3306,
"database": "fastapi_vue3", # 数据库名称
"user": "root",
"password": "123456", # 数据库密码
"minsize": 1,
"maxsize": 10,
"charset": "utf8mb4",
"echo": True
}
},
},
"apps": {
"models": {
"models": ["models"],
"default_connection": "default",
}
},
"use_tz": True, # 是否使用时区
"timezone": "Asia/Shanghai"
}
在 main.py 里面注册 orm
from tortoise.contrib.fastapi import register_tortoise
# 注册 orm
register_tortoise(app, config=TORTOISE_ORM, add_exception_handlers=True)
设置 uvicorn 启动
import uvicorn
if __name__ == "__main__":
uvicorn.run("main:app", reload=True, port=9090)
设置 Model
创建 models.py 文件
from tortoise import fields
from tortoise.models import Model
class Student(Model):
id = fields.IntField(primary_key=True)
no = fields.CharField(max_length=255, null=True)
name = fields.CharField(max_length=255, null=True)
clazz = fields.CharField(max_length=255, null=True)
major = fields.CharField(max_length=255, null=True)
college = fields.CharField(max_length=255, null=True)
phone = fields.CharField(max_length=255, null=True)
email = fields.CharField(max_length=255, null=True)
address = fields.CharField(max_length=255, null=True)
class Meta:
table_name = 'student'
然后你就可以写接口,实现学生的模糊查询
@app.get("/student/selectAll")
async def select_all(name: str = '', no: str = ''):
stu_list = await Student.filter(name__contains=name).filter(no__contains=no)
return stu_list
整个的 main.py
from fastapi import FastAPI
import uvicorn
from tortoise.contrib.fastapi import register_tortoise
from models import Student
from settings import TORTOISE_ORM
app = FastAPI()
# 注册 orm
register_tortoise(app, config=TORTOISE_ORM, add_exception_handlers=True)
@app.get("/student/selectAll")
async def select_all(name: str = '', no: str = ''):
stu_list = await Student.filter(name__contains=name).filter(no__contains=no)
return stu_list
if __name__ == "__main__":
uvicorn.run("main:app", reload=True, port=9090)