手把手教会你fastapi demo项目的使用

前言

前几天收到一位算法同学的私信,说是自己都后端框架从来都没用过。但是又有经常要给其他同事出一个demo接口,看到了我的文章希望我科普下。fastapi的框架到底怎么用,最好5分钟上手的那种。今天刚好有时间,我准备出一个这样教程,有不足之处大家批评指出,我随时更新。争取把教程做到最详细,上来一把就能使用的程度。

文章更新1:2024-07-25

*** 根据反馈将识别效果的图片地址返回,支持在线查看。

项目信息

fastapi demo项目原本是服务于从django项目过度至fastapi的同学,使用了和django orm差不多的tortoise orm ,这个异步的数据库插件可能大家不熟悉。不过没关系,鉴于你们的需求简单,也不用更换。如果不想用数据库,我写了个单文件demo,估计也能满足你的需求。使用数据库的话,我在此项目的基础上加入点说明,足以让你们无压力用起来。

fastapi_demo_project: 听说你觉得django没有异步,玩起来不高大上。很好,我想教你用django的方式写fastapi,隔壁老奶奶用的都比你6。 (gitee.com)

基础环境的搭建

1. 环境基础

相信有点python基础的同学,肯定知道跑起来一个python项目需要先构建一个虚拟环境。在一个纯净环境的基础上执行 pip install -r req.txt 安装fastapi demo项目的基础环境。注意至于你算法需要的依赖你自己安装,假如你想直接用我前段时间构建的yolov8接口,需要安装 torch torchvision ultralytics。如果是其他算法,自行构建绑定对象,替换main.py中的YOLO即可。

2. 数据库(也可以不搞)

不需要账号密码的同学可以直接参考 no_database_only_main.py

至于为什么要搞个数据库,主要还是想让你有个账号密码,这样接口就可以用户验证后才可调用了。

本项目使用的postgresql数据库,对于可能只了解点mysql的同学觉得陌生。其实如果需求不不复杂,使用起来差别并不大。网上找个教程安装个postgresql数据库。我这里不赘述。我默认你肯定会了。安装过程比mysql简单多了

安装好数据库之后,你可以使用psql命令登录数据库:

root@debian:~# psql -U postgres
Password for user postgres:
psql (12.18 (Debian 12.18-1.pgdg120+2))
Type "help" for help.

postgres=# create database fastapi_demo_db;
CREATE DATABASE
postgres=# \l
                                      List of databases
        Name        |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
--------------------+----------+----------+-------------+-------------+-----------------------

 django_demo_db     | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 fastapi_demo_db    | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 postgres           | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 template0          | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
                    |          |          |             |             | postgres=CTc/postgres
 template1          | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
                    |          |          |             |             | postgres=CTc/postgres
 trim               | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
(11 rows)

有的同学可能psql -U postgres 命令报错了,找不到初始密码啥的。也可以用

root@debian:~# su postgres
postgres@debian:/root$ psql
could not change directory to "/root": 权限不够
Password for user postgres:
psql (12.18 (Debian 12.18-1.pgdg120+2))
Type "help" for help.

postgres=#

 如果你没改任何配置上面这个方法你肯定可以免密登录。创建个数据库即可。

3. 运行基础

跑项目之前先需要把表同步至数据库:

1. 修改setting.py文件写入你的数据库账密

POSTGRES_HOST = 'xxxxxxx' if DEBUG else "xxx.xx.xx.xxx"  # 线上地址
POSTGRES_USER = 'postgres' if DEBUG else "xxx"
POSTGRES_PWD = 'xxxxxxx' if DEBUG else "xxxxxx"
POSTDB = 'fastapi_demo_db' if DEBUG else "django_demo_db"

2. 在main.py 中启用表格同步,现在默认的就是true

register_tortoise(
    app,
    # db_url=DB_URL,
    # modules={"models": [MODEL_PATH]},
    config=TORTOISE_CONFIG,
    generate_schemas=True,  # 是否创建表 True 创建表 False 不创建表
    add_exception_handlers=False,
)

3.访问api文档

不出意外的话启动界面如下所示:

 点击这个地址直接访问就是

 别慌,在地址后加入/docs,就可以得到这个界面。

重要事情说三遍,这个loading一定要用鼠标点击一下这个loading一定要用鼠标点击一下,这个loading一定要用鼠标点击一下

然后你得到这个界面就可以正常使用了。这里loading的原因是因为这个静态资源链接是外网资源,我下载到本地里边,能改动的我都改了。不影响使用,如果默认使用官网的有时候会加载不出来。。。。

4.使用步骤

很简单,账密版本就需要先登录,加入你的数据库是空的,需要先写入一个账号。

参考insert_user_to_table.py 

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from tortoise import Tortoise,run_async

from models import Users
from src.tools.password import md5_password


async def init():
    POSTGRES_HOST = "xxxx"  # 你的数据库地址
    POSTGRES_USER = "postgres"      # 账号
    POSTGRES_PWD = "xxxxxxx"       # 密码
    POSTDB = "fastapi_demo_db"       # 数据库名

    await Tortoise.init(
        db_url= f'postgres://{POSTGRES_USER}:{POSTGRES_PWD}@{POSTGRES_HOST}:5432/{POSTDB}',
        # modules={'models': ['models']}
        modules={'models': ['__main__']}
    )
    # Generate the schema
    await Tortoise.generate_schemas()


async def insert_data():
    target = {
        "account": "fefe",
        "name": "张大大",
        "phone": "13344556677",
        "password": md5_password('123456'),
    }
    data = await Users.create(**target)
    print(f"插入成功!{data}")


if __name__ == '__main__':
    run_async(init())
    run_async(insert_data())

 插入你喜欢的账密之后,直接在登录接口

好的,经过一系列操作之后相信你肯定会用了。

如果是单文件版本的demo,更简单了,你根本无需登录。直接测试即可。

 这就是fastapi比较详细的教程了,想用的同学肯定可以轻松上手。写了很久,点个赞吧哥!

  • 37
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值