我是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'
你能帮我吗?
答案 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