Flask 3.x + dependency-injector 4.xAttributeError: ‘Provide‘ object has no attribute ‘xxxx‘

本文主要是介绍Flask 3.x + dependency-injector 4.xAttributeError: ‘Provide‘ object has no attribute ‘xxxx‘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用了几天flask+dependency-injector,之前都好好的,今天在规范项目结构而且加了一堆代码之后突然出现了这个错,心想不会啊,之前都好好的,chatGPT, new bing ,stackoverflow都问遍了,就是找不到正确的解决方案,回家之后一点点的rollback检查,终于发现问题所在了.

首先呢先说说一般的解决方法:

这就是初学的时候很容易犯的一个错误,编译器不会告诉你错了,启动项目也没问题,知道call到这个api了就会报这个错.


from flask import  Blueprint
from dependency_injector.wiring import inject, Providefrom main.service.user_services import UserService
from main.containers import Containerdb_bp=Blueprint('db',__name__)@db_bp.route('/create_user')
def create_user(user_service:UserService=Provide[Container.user_service]):return user_service.create_user().to_string()

那就是忘记加 @inject


from flask import  Blueprint
from dependency_injector.wiring import inject, Providefrom main.service.user_services import UserService
from main.containers import Containerdb_bp=Blueprint('db',__name__)
@inject
@db_bp.route('/create_user')
def create_user(user_service:UserService=Provide[Container.user_service]):return user_service.create_user().to_string()

还有一种情况就是在Containers 中定义的问题,这里我就不展示了,只是把Containers 贴出来,这里一般就是忘记定义而已,很好检查

"""Containers module."""from dependency_injector import containers, providersfrom main.config.database_config import DatabaseConfig
from main.config.storage_config import StorageConfig
from main.repository.user_repositories import UserRepository
from main.service.user_services import UserService
from .beanFactory import BeanFactoryclass Container(containers.DeclarativeContainer):wiring_config = containers.WiringConfiguration(packages=["main.db","main",])config = providers.Configuration(yaml_files=["config.yml"])db=providers.Singleton(DatabaseConfig,db_url=config.db.url)storage=providers.Singleton(StorageConfig,storage_config=config.storage)storage = providers.Factory(storage.provided.getStorageService)user_repository = providers.Factory(UserRepository,session_factory=db.provided.session,)user_service = providers.Factory(UserService,user_repository=user_repository,)

重头戏来了

我遇到当然不属于这里的任何一种,我发现我在整理项目结构的时候,把blueprint往目录深处放了,之前是和application.py同一目录,现在出问题了,就怀疑是目录的问题,移出来之后果然不报错了.然后一点一点排查,发现了问题根源,那就是  __init__.py ,他是用来告诉python这是一个包的.

我修改目录结构之后是这样的

/application.py
/web/controller__init__.pyblueprint.py

 在application.py里面引入也是没问题的 from .web.controller.blueprint import bp

但是其实问题就出在目录里面,我/controller目录里面有__init__.py没错,但是/web里面没有放,就导致了这个问题. 

修改成这样,就可以完美解决了.

记住修改之后需要重新启动项目,热部署不会加载到这个改动.

/application.py
/web__init__.py/controller__init__.pyblueprint.py

这篇关于Flask 3.x + dependency-injector 4.xAttributeError: ‘Provide‘ object has no attribute ‘xxxx‘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/462587

相关文章

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O