Я использую колбу, конфигурация по умолчанию:
from flask import Flask
app = Flask(name)
Хорошо, это работает, но я хочу сделать другой способ инициализации моего приложения Flask, я хочу создать пакет, чтобы сделать это.
Я пытаюсь получить флешку приложения из пакета, поэтому я создаю пакет, и внутри этого pkg у меня есть функция:
import json
from flask import Flask
from flask_cors import CORS, cross_origin
BASE_URL = '/api/'
cors_default = {
"api/ping": {"origins": "*"}
}
app = None
def factory(fn, name, cors=None):
global app
app = Flask(name)
CORS(app, resources={json.dumps(cors_default)})
if cors:
CORS(app, resources=json.dumps({**cors, **cors_default}))
from bigbang_flask.app.routes import ping
app.add_url_rule(BASE_URL + "ping", "PING", ping.route, methods=["GET"])
fn(app)
return app
print('API is running...')
хорошо, она работает хорошо, она создаетсякласс Flask, он вызывает функцию fn()
, которая получает экземпляр приложения, все в этом методе (который находится внутри моего pkg) работает.
Итак, в моем приложении, которое использует этот pkg, в моем app/__.init__.py
каталог, который у меня есть:
import json
from bigbang_flask.app import factory as appFactory
def fn(applib):
# Routes files
from app.presentation.routes import blur as blur_detection
# Routes rules
applib.add_url_rule('/api/blur', 'BLUR', blur_detection.route, methods=['POST'])
# Config
config = json.load(open('./app/config.json'))
app = appFactory(fn, __name__, config["cors"])
хорошо, он работает хорошо, он вызывает apFactory, он инициализирует мой сервер с моими маршрутами, все здесь нормально.
[Моя проблема]
Когда я пытался получить доступ к приложению в другую папку / скрипт, я получаю ошибку: cannot import name 'app' from 'app'
пример: я нахожусь в каталоге app/presentation/utils/response.py
, presentation
и utils
в папках есть пустой файл __init__.py
, внутри моего response.py
у меня есть только функция:
import json
from app import app
def factory(
content,
status=200,
headers=None,
mimetype='application/json',
content_type='application/json'):
content = json.dumps(content)
return app.response_class(
response = content,
status= status,
headers = headers,
direct_passthrough=False,
mimetype='application/json',
content_type='application/json'
)
И вот моя проблема, в этомфайл, который я не могу импортировать в приложение.
Если я поставлю app = Flask(__name__)
после импорта на app/__init__.py
, это работает, но я не могу иметь колбу внутри app/__init__.py
, потому что хочу получитьэто из моего pkg (bigbang_flask):
import json
from flask import Flask
from bigbang_flask.app import factory as appFactory
app = Flask(__name__)
def fn(applib):
# Routes files
from app.presentation.routes import blur as blur_detection
[...]
кто-нибудь может мне помочь?