• FastAPI依赖注入系统系列(一) 什么是依赖注入系统


    一、简介

    FastAPI有一个非常强大但是直观的依赖注入系统,它被设计成简单易用,开发人员使用它可以很简单的与FastAPI中的其它部分集成。

    “依赖注入”意味着在程序中,对于你的代码有一种方式去声明它运行时需要的东西。这个东西就被称为“依赖项”。然后FastAPI将会按照你声明提供的依赖项去做任何需要做的事情。

      通常依赖注入可以:

    • 解决代码重复问题
    • 共享数据库连接
    • 加强安全、认证、角色管理等
    • 其它方面

    总之,提高代码的复用率。

    二、使用

    1、创建依赖

    它是一个可以像路径操作函数一样接收所有同样参数的函数。

    from typing import Optional
    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
        return {"q": q, "skip": skip, "limit": limit}

    2、导入Depends

    其它路径操作函数如果需要使用就需要先导入Depends。

    from typing import Optional
    from fastapi import Depends, FastAPI
    
    app = FastAPI()
    
    
    async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
        return {"q": q, "skip": skip, "limit": limit}

    3、声明依赖

    在需要使用上述依赖的路径操作函数中进行声明。

    from typing import Optional
    from fastapi import Depends, FastAPI
    
    app = FastAPI()
    
    
    async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
        return {"q": q, "skip": skip, "limit": limit}
    
    
    @app.get("/items/")
    async def read_items(commons: dict = Depends(common_parameters)):
        return commons
    
    
    @app.get("/users/")
    async def read_users(commons: dict = Depends(common_parameters)):
        return commons

    在路径操作声明依赖项的接收参数以及类型dict(依赖项的返回值是dict类型)。Depends接收一个参数common_parameter(依赖项函数,必须是一个类似函数一样),然后这个参数common-parameter将像路径操作函数一样接收所有参数。

    上面的工作方式是当一个新的请求到达后:

    • FastAPI会优先调用依赖,将请求参数,比如查询参数q、skip、limit传递给依赖函数
    • 依赖函数如果有返回值,就会将返回值返回到路径操作函数的参数接收项
    • commons就是依赖函数返回值的接收参数

    同时“/users/”和“/items/”依赖项都是common_parameters,这样显然提高了代码的复用率。

    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    QThread的用法:开启与退出
    QThread必须要了解的几个函数
    Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list
    安装gcc-6系列与安装boost (Ubuntu16.04LTS)
    Qt 的线程与事件循环
    Linux 平台和 Windows平台下 Unicode与UTF-8互转
    [spark] spark 特性、简介、下载
    [hadoop读书笔记] 第十五章 sqoop1.4.6小实验
    [hadoop读书笔记] 第十五章 sqoop1.4.6小实验
    [hadoop读书笔记] 第十五章 sqoop1.4.6小实验
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14856746.html
Copyright © 2020-2023  润新知