flask 与 html5,【Python】在Flask框架中同时使用蓝图与Flask_SQLAlchemy

在Flask框架中同时使用蓝图与Flask_SQLAlchemy遇到了循环导入的问题。

目录结构如下:

.

├── jade_ims

│   ├── __init__.py

│   ├── models.py

│   └── views

│   ├── home.py

│   ├── __init__.py

│   └── install.py

└── run.py

跟代码无关的部分均已去除,run.py只是单纯调用app.run()

jade_ims目录下的__init__.py文件的导入部分如下:

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

from jade_ims.views.home import home

from jade_ims.views.install import install

models.py的导入部分如下:

from jade_ims import db

views目录下的install.py导入部分如下:

from flask import Blueprint, render_template, g

from jade_ims.models import User

报错提示如下:

Traceback (most recent call last):

File "/mnt/Data/Code/jade-ims/run.py", line 1, in

from jade_ims import app

File "/mnt/Data/Code/jade-ims/jade_ims/__init__.py", line 9, in

from jade_ims.views.install import install

File "/mnt/Data/Code/jade-ims/jade_ims/views/install.py", line 2, in

from jade_ims.models import User

File "/mnt/Data/Code/jade-ims/jade_ims/models.py", line 1, in

from jade_ims import db

ImportError: cannot import name 'db'

我的需求时想要在视图中直接操作db进行select,insert等操作。

全部源码可以在这里找到: https://github.com/Xuanwo/jade-ims

请问是我什么地方搞错了吗?谢谢大家。

回答

我也是刚学flask,随便说说。

install.py

from jade_ims import app

什么鬼?应该是第一错

models.py

from jade_ims import db

应该是第二错 db实例化放这里才对 要是放init init要先注册view蓝图 view又要导入db类 循环了 改之

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

__init__.py

应该用工厂函数 一坨实例化太难看

from flask import Flask

from werkzeug.utils import import_string

from config import config

from models import db

bps = ['jade_ims.views.home:home',

'jade_ims.views.install:install'

]

def create_app():

app = Flask(__name__)

app.config.from_object('config')

db.init_app(app)

for path in bps:

bp = import_string(path)

app.register_blueprint(bp)

return app

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值