Estou tendo problemas para entender como dividir um aplicativo Flask em vários arquivos.
Estou criando um serviço da web e quero dividir a API em arquivos diferentes (AccountAPI.py, UploadAPI.py, ...), apenas para não ter um arquivo python enorme.
Eu li que você pode fazer isso com o Blueprints, mas não tenho certeza se essa rota é a certa para mim.
Em última análise, quero executar um arquivo python principal e incluir outros arquivos para que, quando for executado, eles sejam considerados um arquivo grande.
Por exemplo, se eu tiver Main.py e AccountAPI.py, quero poder fazer isso:
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"
Eu sei que com este exemplo obviamente não funcionará, mas é possível fazer algo assim?
obrigado
fonte
accountList
dentro de uma classe no mesmo arquivo?Usando
Blueprint
você pode adicionar suas rotas noroutes
diretório.Estrutura
__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)
Se você quiser adicionar um novo arquivo de rota, digamos
accounts.py
, você só precisa criar o arquivoaccounts.py
noroutes
diretório, assim comoindex.py
eusers.py
, em seguida, importá-lo noroutes.__init__.py
arquivofrom .accounts import *
fonte
Se você estiver usando blueprints e quiser rotear / redirecionar para um url do seu blueprint dentro de um modelo que está usando, você precisa usar a instrução url_for correta.
No seu caso, se você gostaria de abrir a conta url do seu projeto, você deve declará-lo assim em seu modelo :
href="{{ url_for('account_api.account') }}"
e para o aplicativo principal seria assim:
redirect(url_for('account_api.account'))
Caso contrário, a biblioteca werkzeug apresentará um erro.
fonte
Uma outra maneira de fazer isso pode ser com o carregamento lento , em que você anexaria explicitamente as funções de visualização conforme a necessidade.
fonte