Divide la aplicación Python Flask en múltiples archivos

Tengo problemas para comprender cómo dividir una aplicación de flask en varios archivos.

Estoy creando un servicio web y quiero dividir las API en diferentes archivos (AccountAPI.py, UploadAPI.py, …), solo para que no tenga un archivo python enorme.

He leído que puedes hacer esto con Blueprints, pero no estoy completamente seguro de que la ruta sea la adecuada para mí.

En última instancia, quiero ejecutar un archivo principal de Python e incluir otros archivos para que cuando se ejecute, se consideren un archivo grande.

Por ejemplo, si tengo Main.py y AccountAPI.py quiero poder hacer esto:

Main.py:

from flask import Flask import AccountAPI app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

AccountAPI.py:

 @app.route("/account") def accountList(): return "list of accounts" 

Sé que con este ejemplo obviamente no funcionará, pero ¿es posible hacer algo así?

Gracias

Sí, los planos son la forma correcta de hacerlo. Lo que estás tratando de hacer se puede lograr de la siguiente manera:

Main.py

 from flask import Flask from AccountAPI import account_api app = Flask(__name__) app.register_blueprint(account_api) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

AccountAPI.py

 from flask import Blueprint account_api = Blueprint('account_api', __name__) @account_api.route("/account") def accountList(): return "list of accounts" 

Si esta es una opción, podría considerar el uso de diferentes prefijos de URL para las diferentes API / Blueprints con el fin de separarlos limpiamente. Esto se puede hacer con una ligera modificación a la llamada register_blueprint anterior:

 app.register_blueprint(account_api, url_prefix='/accounts') 

Para obtener más documentación, también puede consultar los documentos oficiales .

Usando Blueprint puedes agregar tus rutas en el directorio de routes .

Estructura

 app.py routes __init__.py index.py users.py 

__init__.py

 from flask import Blueprint routes = Blueprint('routes', __name__) from .index import * from .users import * 

index.py

 from flask import render_template from . import routes @routes.route('/') def index(): return render_template('index.html') 

usuarios.py

 from flask import render_template from . import routes @routes.route('/users') def users(): return render_template('users.html') 

app.py

 from routes import * app.register_blueprint(routes) 

Si desea agregar un nuevo archivo de ruta, por ejemplo, accounts.py , solo necesita crear el archivo accounts.py en el directorio de routes , al igual que index.py y users.py , luego importarlo en las routes.__init__.py expediente

 from .accounts import * 

Si está utilizando planos y desea enrutar / redirigir a una url de su plano dentro de una plantilla que está utilizando, debe usar la statement url_for correcta.

En su caso, si desea abrir la cuenta url de su proyecto, debe indicarlo así en su plantilla :

 href="{{ url_for('account_api.account') }}" 

y para la aplicación principal se vería así:

 redirect(url_for('account_api.account')) 

De lo contrario, la biblioteca werkzeug arrojará un error.

Otra forma de hacer esto puede ser con carga lenta , en la que adjuntaría explícitamente funciones de vista según sea necesario.