Python web:Fastapi快速入门

1. 项目目标

(1)了解fastapi优点

(2)熟悉创建fastapi程序流程

(3)了解fastapi常用CURD操作

2. 项目准备

2.1. 基础准备

系统镜像:Win 11

fastapi官网:FastAPI

环境准备:

  • python环境3.8以上
  • pycharm
  • pip3 install uvicorn
    pip3 install fastapi

    3. 项目实施

    3.1. 为什么要使用FastAPI?

    在当今快速发展的软件开发领域,构建高质量、高性能的 API 已成为开发者们的共同追求。FastAPI,作为一个新兴的 Python web 框架,以其卓越的性能和简洁的代码结构,迅速在开发者社区中获得了广泛的关注和认可。我个人认为使用FastAPI的理由如下:

  • 更高性能
  • 提高开发效率
  • 简单易学
  • 代码简洁
  • 健壮可靠
  • 3.2. 快速开始FastAPI

    (1)新建项目

    在pycharm中创建FastAPI项目,第一次启动时pycharm会自动安装fastapi和uvicorn

    (2)导入 FastAPI

    from fastapi import FastAPI

    (3)创建一个 FastAPI实例

    app = FastAPI()

    变量app就是fastapi类的一个实例,后面的代码都会用上前面创建的这个实例。

    (4)创建一个helloworld应用

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def root():
        return {"message": "Hello World"}

    将代码放入 main.py 文件中,然后你可以像下面这样运行 uvicorn:

    uvicorn main:app --reload

    也可以直接在代码中调用uvicorn:(学习时推荐,不用重复运行uvicorn命令,直接右键run即可)

    import uvicorn
    if __name__ == "__main__":
        uvicorn.run(app='main:app', host='127.0.0.1', port=8000, reload=True)

    运行后控制台输出:

    使用浏览器访问http://127.0.0.1:8000:

    (5)查看交互式API文档

    浏览器访问http://127.0.0.1:8000/docs:

    展开后单击“Try it out”

    单击“Execute”可以查看到Curl,Responses等信息。

    3.3. FastAPI操作

    (1)FastAPI有以下操作(这里的「操作」指的是一种 HTTP「方法」)

    @app.get() # GET请求 用于读取数据
    @app.post() # POST请求 用于创建数据
    @app.put() # PUT请求 用于更新数据
    @app.delete() # DELETE请求 用于删除数据
    @app.options() # OPTIONS请求 用于获取目的资源所支持的通信选项
    @app.head() # HEAD请求 用于请求资源的头部信息
    @app.patch() # PATCH请求 用于用于对资源进行部分修改
    @app.trace() # TRACE请求 用于实现沿通向目标资源的路径的消息环回(loop-back)测试 ,提供了一种实用的 debug 机制。

    (2)FastAPI常用操作

  • POST:创建数据。
  • GET:读取数据。
  • PUT:更新数据。
  • DELETE:删除数据。
  • (3)GET

    GET 请求通常用于从服务器检索数据。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    # 假设我们有一个存储了用户信息的内存数据库
    fake_db = {
        '1': {'name': 'Alice'},
        '2': {'name': 'Bob'}
    }
    
    @app.get("/users/{user_id}")
    def read_user(user_id: str):
        return fake_db.get(user_id)
    
    # 获取所有用户
    @app.get("/users")
    def read_users():
        return fake_db

    这个程序使用了两次get:一个用于根据用户ID获取单个用户信息,另一个用于获取所有用户信息。

    (4)POST

    POST 请求通常用来向服务器发送数据以创建新的资源。

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    fake_db = {}
    
    # 创建一个Pydantic模型,用于接收用户数据
    class User(BaseModel):
        name: str
    
    @app.post("/users/{user_id}")
    def create_user(user_id: str, user: User):
        if user_id in fake_db:
            return {"error": "User with this ID already exists"}
        fake_db[user_id] = user.dict()
        return fake_db[user_id]

    这段代码定义了一个POST路由/users/{user_id},用于创建新用户。user_id是路径参数,表示用户的唯一标识符。user是通过Pydantic模型User验证后的请求数据。

    处理函数create_user首先检查user_id是否已经存在于fake_db中。如果已存在,返回一个错误消息。如果user_id不存在于fake_db中,它会将新用户数据存储到fake_db字典中,键为user_id,值是user对象转换为字典的结果。函数返回创建的用户的详细信息。

    (5)PUT

    PUT 请求用于更新现有资源的全部或部分内容。

    from fastapi import FastAPI, HTTPException
    from pydantic import BaseModel
    
    app = FastAPI()
    
    fake_db = {
        '1': {'name': 'Alice'},
        '2': {'name': 'Bob'}
    }
    
    class UserUpdateRequest(BaseModel):
        name: str
    
    @app.put("/users/{user_id}")
    def update_user(user_id: str, user_update: UserUpdateRequest):
        if user_id not in fake_db:
            raise HTTPException(status_code=404, detail="User not found")
        fake_db[user_id].update(user_update.dict())
        return fake_db[user_id]
    

    函数update_user首先检查user_id是否存在于fake_db中。如果不存在,抛出一个404状态码的HTTPException,表示用户未找到。如果user_id存在于fake_db中,它会使用update方法更新该用户的名称。user_update.dict()将Pydantic模型转换为字典,以便可以更新模拟数据库中的用户信息。最后,函数返回更新后的用户信息。

    (6)DELETE

    DELETE 请求用于删除服务器上的资源。

    from fastapi import FastAPI, HTTPException
    
    app = FastAPI()
    
    fake_db = {
        '1': {'name': 'Alice'},
        '2': {'name': 'Bob'}
    }
    
    @app.delete("/users/{user_id}")
    def delete_user(user_id: str):
        if user_id not in fake_db:
            raise HTTPException(status_code=404, detail="User not found")
        del fake_db[user_id]
        return {"message": "User deleted successfully"}

    函数delete_user首先检查user_id是否存在于fake_db中。如果不存在,抛出一个404状态码的HTTPException,表示用户未找到。如果user_id存在于fake_db中,使用del语句删除该用户信息。最后,函数返回一个包含成功消息的字典,表示用户已成功删除。

    4. 项目总结

    本项目简要介绍了FastAPI的入门。我先介绍了为什么要使用fastapi,它有许多的优点,然后我使用了简单的helloworld程序开始我们的fastapi之旅,最后使用一个用户信息库的CURD演示了FastAPI的常用操作。本人是初学者,有错误欢迎大佬们指出捏。

    作者:颗粒CloudCoder

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python web:Fastapi快速入门

    发表回复