flask_SQLAlchemy and Blueprints - PullRequest
       3

flask_SQLAlchemy and Blueprints

1 голос
/ 20 сентября 2019

Я новичок в Python. Я изучал некоторые учебные пособия, и теперь я пытаюсь создать сайт с API самостоятельно.Я использую Flask, Flask_SQLAlchemy и Blueprints, и я пытался создать базу данных SQLite3 только для доступа через API.(У меня есть другие чертежи, называемые site и admin =

Это моя файловая структура (только для части API, я не думаю, что структура сайта и админа важна, дайте мне знать, если я ошибаюсь):

/ hspmng

/ hspmng / run.py

/ hspmng / app

/ hspmng / app / ____ init ___. Py

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

/ hspmng / app / api / rout.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 / rout.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 голосов
/ 20 сентября 2019

Переместите следующие две строки, где вы устанавливаете свою конфигурацию, на "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

...