Mam problem ze zrozumieniem, jak podzielić aplikację Flask na wiele plików.
Tworzę usługę internetową i chcę podzielić interfejsy API na różne pliki (AccountAPI.py, UploadAPI.py, ...), aby nie mieć jednego ogromnego pliku Pythona.
Czytałem, że możesz to zrobić dzięki Blueprints, ale nie jestem do końca pewien, czy trasa jest dla mnie odpowiednia.
Ostatecznie chcę uruchomić jeden główny plik Pythona i dołączyć inne pliki, aby po uruchomieniu były traktowane jako jeden duży plik.
Na przykład, jeśli mam Main.py i AccountAPI.py, chcę móc to zrobić:
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"
Wiem, że na tym przykładzie to oczywiście nie zadziała, ale czy można coś takiego zrobić?
Dzięki
źródło
accountList
wewnątrz klasy w tym samym pliku?Używając
Blueprint
możesz dodać swoje trasy wroutes
katalogu.Struktura
__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)
Jeśli chcesz dodać nowy plik trasy, powiedzmy
accounts.py
, że wystarczy utworzyć plikaccounts.py
wroutes
katalogu, tak jakindex.py
iusers.py
, a następnie zaimportować go doroutes.__init__.py
plikufrom .accounts import *
źródło
Jeśli używasz schematów i chcesz skierować / przekierować do adresu URL swojego planu w szablonie, którego używasz, musisz użyć poprawnej instrukcji url_for.
W twoim przypadku, jeśli chcesz otworzyć konto url swojego planu, musisz podać to w swoim szablonie w następujący sposób :
href="{{ url_for('account_api.account') }}"
a dla głównej aplikacji wyglądałoby to tak:
redirect(url_for('account_api.account'))
W przeciwnym razie biblioteka werkzeug zgłosi błąd.
źródło
Innym sposobem na to może być leniwe ładowanie , w którym jawnie dołączasz funkcje widoku na podstawie potrzeb.
źródło