flask_SQLAlchemy和蓝图

时间:2019-09-19 22:45:17

标签: python flask flask-sqlalchemy

我是Python的新手,我一直在关注一些教程,现在我正尝试自己创建一个具有API的网站。 我正在使用Flask,Flask_SQLAlchemy和Blueprints,并且试图创建一个只能由API访问的SQLite3数据库。 (我还有其他的蓝图称为site和admin =

这是我的文件结构(仅适用于API部分,我认为站点和管理结构不相关,如果我错了,请告诉我):

/ hspmng

/hspmng/run.py

/ hspmng / app

/ hspmng / app / ____ init ___。py

/ hspmng / app / api / ____ init ___。py

/hspmng/app/api/routes.py / hspmng / app / ____ init ___。py

代码:

/hspmng/run.py

from app import app
app.run (debug=True)

/ hspmng / app / ____ init ___。py

from flask import Flask
from app.api.routes import mod
from app.site.routes import mod
from app.admin.routes import mod

app = Flask(__name__)
app.register_blueprint(api.routes.mod, url_prefix='/api')
app.register_blueprint(site.routes.mod)
app.register_blueprint(admin.routes.mod, url_prefix='/admin')

/hspmng/app/api/routes.py

我的想法是为数据库创建使用一个不同的文件,但出于测试目的,我将其放入路由中。

from flask import Blueprint
from flask_sqlalchemy import SQLAlchemy

mod = Blueprint('api', __name__)

mod.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
mod.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqllite3'

db = SQLAlchemy(mod)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    location = db.Column(db.String(50))


@mod.route('/getStuff')
def getStuff():
    return '<p>API</p>'

/ hspmng / app / api / ____ init___.py为空

要创建数据库,请在命令行中运行python并输入以下内容

from app import db

我收到以下错误

>>> from app import db
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/mnt/d/Projects/hspmng/app/__init__.py", line 2, in <module>
    from app.api.routes import mod
  File "/mnt/d/Projects/hspmng/app/api/routes.py", line 5, in <module>
    mod.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
AttributeError: 'Blueprint' object has no attribute 'config'

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

将以下两行移动到用于设置配置的位置,移至创建"app/____init___.py"对象的 app
config不是Blueprint类的一部分,它是Flask应用程序对象的一部分。

mod.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
mod.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqllite3'

"app/__init__.py" 中,您应该这样做。

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqllite3'

这是为了使您的数据库URL位于应用程序上下文中,以便您所有的蓝图都可以访问它。

您可以在此处查看有关Flask.config的更多详细信息: http://flask.palletsprojects.com/en/1.1.x/api/#flask.Flask.config