Tengo problemas para entender cómo dividir una aplicación de matraz en varios archivos.
Estoy creando un servicio web y quiero dividir las API en diferentes archivos (AccountAPI.py, UploadAPI.py, ...), para no tener un archivo python enorme.
Leí que puedes hacer esto con Blueprints, pero no estoy del todo seguro de que la ruta sea la adecuada para mí.
En última instancia, quiero ejecutar un archivo Python principal 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
fuente
accountList
una clase dentro del mismo archivo?Usando
Blueprint
puede agregar sus rutas en elroutes
directorio.Estructura
__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')
users.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, digamos
accounts.py
, solo necesita crear el archivoaccounts.py
en elroutes
directorio, comoindex.py
yusers.py
, luego importarlo en elroutes.__init__.py
archivofrom .accounts import *
fuente
Si está utilizando blueprints y desea enrutar / redirigir a una URL de su blueprint dentro de una plantilla que está utilizando, debe usar la declaración url_for correcta.
En su caso, si desea abrir la cuenta de url de su plano, 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.
fuente
Otra forma de hacer esto puede ser con la carga diferida , donde adjuntaría explícitamente funciones de vista según sea necesario.
fuente