Удаление ссылки на приложение gloabl из чертежа в Flask - PullRequest
1 голос
/ 12 февраля 2020

В настоящее время я работаю над изучением Flask и создаю рабочую страницу с функциями входа в систему. Теперь я хочу удалить глобальный экземпляр приложения и начать использовать чертежи для подмодулей.

Мой проект структурирован так:

+ app
    + auth
        - __init__.py
        - forms.py
        - routes.py
    + main
    + models
    + templates
    - __init__.py
+ migrations
- index.py
- config.py

Нет, я добавил план к routes.py и использовал там декораторы:

from flask import render_template, flash, redirect, url_for, request, Blueprint
from app import app, db
from app.auth.forms import LoginForm, RegistrationForm
# ...
from app.models.User import User

blueprint = Blueprint('auth', __name__)

@blueprint.route('/login', methods=['GET', 'POST'])
def login():
    return "example login"

__init__.py модуля аутентификации:

from . import forms, routes

Чертеж добавляется в __init__.py папки приложения:

# ...
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
from app.auth.routes import blueprint as auth_bp
app.register_blueprint(auth_bp)

После использования декораторов @blueprint мне больше не нужен @app, но как я могу получить доступ к БД, когда хочу удалить import app и from app.models.User import User part?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Здесь нужно понять две вещи. app как модуль (папка) и app экземпляр flask внутри __init__.py. Когда вы делаете import app внутри схемы аутентификации, вы фактически импортируете весь модуль app, а не экземпляр flask. Когда вы делаете from app import app, вы фактически импортируете экземпляр flask из app модуля. Это может сбивать с толку, чтобы устранить это. Я советую вам изменить имя папки app на что-то другое, например bacher, тогда, когда вам нужно импортировать db внутри вашей схемы аутентификации, используйте from bacher import db и для User модель from bacher.models.User import User

0 голосов
/ 12 февраля 2020
from . import db
from ..models.User import User
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...