当前位置: 首页 > wzjs >正文

k8team wordpress北京网站快速优化排名

k8team wordpress,北京网站快速优化排名,哪个网站做的最好,中华人民共和国住房与城乡建设部依赖注入常用于以下场景: 共享业务逻辑(复用相同的代码逻辑) 共享数据库连接 实现安全、验证、角色权限 等…… 上述场景均可以使用依赖注入,将代码重复最小化。 创建依赖项 依赖项就是一个函数,且可以使用与路…

依赖注入常用于以下场景:

  • 共享业务逻辑(复用相同的代码逻辑)

  • 共享数据库连接

  • 实现安全、验证、角色权限

  • 等……

上述场景均可以使用依赖注入,将代码重复最小化。

创建依赖项

依赖项就是一个函数,且可以使用与路径操作函数相同的参数,依赖项函数的形式和结构与路径操作函数一样。因此,可以把依赖项当作没有「装饰器」(即,没有 @app.get("/some-path") )的路径操作函数。

from typing import Unionimport uvicorn
from fastapi import FastAPI, Dependsapp = FastAPI()# 依赖的组件函数
async def common_parameters(q: Union[str, None] = None,skip: int = 0,limit: int = 100,
):return {"skip": skip, "limit": limit, "q": q}@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 commonsif __name__ == '__main__':uvicorn.run(app)

实现过程:

1、导入 Depends

from fastapi import Depends

2、定义依赖的组件函数

# 依赖的组件函数
async def common_parameters(q: Union[str, None] = None,skip: int = 0,limit: int = 100,
):return {"skip": skip, "limit": limit, "q": q}

3、声明依赖项

声明依赖项需要使用 Depends 和一个新的参数:

async def read_items(commons: dict = Depends(common_parameters)):

其他与「依赖注入」概念相同的术语为:

  • 资源(Resource)

  • 提供方(Provider)

  • 服务(Service)

  • 可注入(Injectable)

  • 组件(Component)

依赖注入系统如此简洁的特性,让 FastAPI 可以与下列系统兼容:

  • 关系型数据库

  • NoSQL 数据库

  • 外部支持库

  • 外部 API

  • 认证和鉴权系统

  • API 使用监控系统

  • 响应数据注入系统

  • 等等……

类作为依赖项

依赖项时一个可调用的对象,Python 中的 "可调用对象" 是指任何 Python 可以像函数一样 "调用" 的对象。Python 类也是 可调用对象。因此,在 FastAPI 中,你可以使用一个 Python 类作为一个依赖项。

实际上 FastAPI 检查的是它是一个 "可调用对象"(函数,类或其他任何类型)以及定义的参数。

import uvicorn
from fastapi import FastAPI, Dependsapp = FastAPI()fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]class CommonQueryParams:def __init__(self, q: str | None = None, skip: int = 0, limit: int = 100):self.q = qself.skip = skipself.limit = limit# FastAPI 调用 CommonQueryParams 类。这将创建该类的一个 "实例",该实例将作为参数 commons 被传递给你的函数。
@app.get("/items/")
async def read_items(commons: CommonQueryParams = Depends(CommonQueryParams)):response = {}if commons.q:response.update({"q": commons.q})items = fake_items_db[commons.skip: commons.skip + commons.limit]response.update({"items": items})return responseif __name__ == '__main__':uvicorn.run(app, host="127.0.0.1", port=8000)

FastAPI 为这些情况提供了一个快捷方式,在这些情况下,依赖项 明确地 是一个类,FastAPI 将 "调用" 它来创建类本身的一个实例。

快捷写法

commons: CommonQueryParams = Depends()

分层依赖注入

假设是用户管理模块,创建如下的目录结构以及python文件:

schemas/user_schema.py

from pydantic import BaseModel, Field
from datetime import datetimeclass User(BaseModel):id: int | None = Field(description="主键ID")username: str | None = Field(description="用户名")age: int | None = Field(description="年龄")is_vip: int | None = Field(description="是否会员 0-不是,1-是")create_time: datetime = Field(description="创建时间")

dao/user_dao.py

from datetime import datetime
from user.schemas.user_schema import Userclass UserDAO:"""数据层"""def __init__(self):passdef get_user_by_username(self, username)-> User:"""根据用户名查询用户信息:param username::return:"""user = User(id=1, username="alice", age=25, is_vip=0, create_time=datetime.now())return user

service/user_service.py

from fastapi import Dependsfrom user.dao.user_dao import UserDAO
from user.schemas.user_schema import Userclass UserService:"""业务逻辑处理层"""def __init__(self, user_dao: UserDAO = Depends()):self.user_dao = user_daodef find_by_username(self, username: str)-> User:"""根据用户名查询用户信息:param username::return:"""return self.user_dao.get_user_by_username(username)

routers/user_routers.py

from fastapi import APIRouter, Dependsfrom commons.result import Result
from user.exceptions.user_exception import UserNotFoundException
from user.service.user_serivce import UserServiceusers = APIRouter()@users.get(path="/find/{username}", summary="根据用户名查询用户", response_model=Result)
async def find_user_by_username(username: str, user_service: UserService = Depends()):user = user_service.find_by_username(username)# 用户不存在if user is None:raise UserNotFoundExceptionresult = Result()result.data = userreturn result

commoms/result.py

from typing import Anyfrom pydantic import BaseModel, Fieldclass Result(BaseModel):code: int = Field(description="响应状态码", default=200)message: str = Field(description="响应结果信息", default="成功")data: Any = Field(description="响应结果数据", default=None)

http://www.dtcms.com/wzjs/337949.html

相关文章:

  • 滨州seo排名狼雨seo网站
  • 企业营销型网站制作多少钱app推广员好做吗
  • 国外网站模板推广营销是什么
  • 如何做招商性网站360营销推广
  • 淘宝客建网站要钱的吗百度最新收录方法
  • 黄色网站国外免费seo搜索优化
  • 做推文加入视频的网站上海百度公司地址在哪里
  • 网站备案增加域名厦门搜索引擎优化
  • 北京到安阳多少公里路seo网络优化师就业前景
  • 生活分享网站源码 博客风格分享小清新php源码谷歌排名优化入门教程
  • app建设网站网站排名优化怎样做
  • 手机网站自动适配代码企业网络策划
  • 如何建立网站后台市场营销实务
  • wordpress响应式网站模板下载百度seo如何优化关键词
  • 简洁大气的企业网站权威解读当前经济热点问题
  • wordpress视频网站采集北京网络营销
  • 免费源码资源站青岛seo建站
  • 网站微信分享怎么做业务推广方式有哪些
  • 新疆建设兵团第四师中学网站seoul是什么品牌
  • 网站怎么做dwcs6百度推广在哪里
  • 企业注册资金需要实缴吗刷神马网站优化排名
  • 深圳建设网站培训机构南宁百度seo优化
  • 如何做文档附网站网络营销的渠道
  • wordpress 图片显示插件下载班级优化大师官方网站
  • 品牌网站建设荐选蝌蚪西安网络推广运营公司
  • wordpress保护后台登录网站seo检测
  • 私做政府网站联赛积分榜排名
  • dw做存资料网站网店营销
  • 番禺建设网站集团百度网站收录提交
  • 个人网站建设方案书范文个人如何建立免费网站