Uma forma automatica de organizar seu código em flask!
No Flask temos a função de blueprint, serve para organizarmos nosso projeto em outros arquivos, basta em um arquivo de controller vc criar um blueprint:
src/cotrollers/company.py
from flask import Blueprint
company = Blueprint('company', __name__, url_prefix='/company')
@company.route('/')
def index():
return '<h1>Hello World</h1>'
E no arquivo principal "registrar" esse blueprint
main.py
from flask import Flask
from src.controllers.company import company
app = Flask(__name__)
app.register_blueprint(company)
app.run()
Mas para isso, para eu registrar outros blueprints de outros arquivos, eu precisaria registrar dezenas de app.register_blueprint()
por exemplo:
app.register_blueprint(company)
app.register_blueprint(person)
app.register_blueprint(car)
app.register_blueprint(documents)
Para não fazer isso, eu acabei criando um sisteminha que registra esses arquivos, apenas de ter criado o controller:
import os
from flask import Flask
class MyCashier(Flask):
def __init__(self):
super(MyCashier, self).__init__("MyCashier")
for i in os.listdir('./src/controllers'):
if str(i).endswith('.py'):
i = str(i).replace('.py', '')
self.register_blueprint(__import__('src.controllers.' + i, fromlist=[i]).__dict__[i])
print("loaded ", i)
client = MyCashier()
client.run(port=1395)
Desse jeito ele acaba importando e registrando todos os blueprints que estejam em src.controllers
. O nome do arquivo e da classe precisa ser o mesmo para funcionar!