ImportError: невозможно импортировать имя «apiv1» из частично инициализированного модуля «app.api» (скорее всего, из-за циклического импорта) - PullRequest
5 голосов
/ 04 февраля 2020

Я пытался заставить мой API работать с приложением Flask, но продолжаю получать предупреждения с циклическими ссылками, независимо от того, что я изменяю.

Я могу быть глупым. Но я не понимаю, как модули загружаются только частично.

Я пытаюсь реализовать фабричный шаблон , но пытаюсь сделать это успешно.

Здесь мой код:

app/__init__.py:

from flask import Flask
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

login = LoginManager()

def create_app():
    app = Flask(__name__)
    from config import Config
    app.config.from_object(Config)

    db.init_app(app)

    from app.api import apiv1
    app.register_blueprint(apiv1)

    login.init_app(app)
    login.login_view = 'login'

    return app

app/api/__init__.py:

from manage import app
from flask_restplus import Api
from flask import Blueprint
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

limiter = Limiter(
    app,
    key_func=get_remote_address,
)

apiv1 = Blueprint('api', __name__, url_prefix='/api')

api = Api(apiv1, doc='/documentation', version='1.0', title='Docket API',
          description='API for Docket. Create users and todo items through a REST API.\n'
                      'First of all, begin by registering a new user via the registration form in the web interface.\n'
                      'Or via a `POST` request to the `/Register/` end point', decorators=[limiter.limit("50/day", error_message="You have reached the API limit for today")])

manage.py:

from app import create_app, db
from flask_migrate import Migrate
from flask_script import Manager

app = create_app()

manager = Manager(app)

migrate = Migrate(app, db)

from app.routes import *
from app.models import *

if __name__ == '__main__':
    app.run(debug=True)

Obviouly Я что-то упустил. Но я не уверен, что: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...