Saya kesulitan memahami cara membagi aplikasi flask menjadi beberapa file.
Saya membuat layanan web dan saya ingin membagi api menjadi file yang berbeda (AccountAPI.py, UploadAPI.py, ...), jadi saya tidak punya satu file python yang besar.
Saya pernah membaca bahwa Anda dapat melakukan ini dengan Cetak Biru, tetapi saya tidak sepenuhnya yakin bahwa rute tersebut tepat untuk saya.
Akhirnya saya ingin menjalankan satu file python utama dan menyertakan file lain sehingga ketika berjalan, mereka dianggap satu file besar.
Misalnya jika saya memiliki Main.py dan AccountAPI.py saya ingin dapat melakukan ini:
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"
Saya tahu dengan contoh ini jelas tidak akan berhasil, tetapi apakah mungkin untuk melakukan sesuatu seperti itu?
Terima kasih
sumber
accountList
kelas ke dalam file yang sama?Menggunakan
Blueprint
Anda dapat menambahkan rute Anda diroutes
direktori.Struktur
__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)
Jika Anda ingin menambahkan file rute baru, katakanlah
accounts.py
, Anda hanya perlu membuat fileaccounts.py
diroutes
direktori, sepertiindex.py
danusers.py
, lalu mengimpornya keroutes.__init__.py
filefrom .accounts import *
sumber
Jika Anda menggunakan cetak biru dan ingin merutekan / mengarahkan ke url cetak biru Anda di dalam templat yang Anda gunakan, Anda perlu menggunakan pernyataan url_for yang benar.
Dalam kasus Anda, jika Anda ingin membuka akun url cetak biru Anda, Anda harus menyatakannya seperti ini di template Anda :
href="{{ url_for('account_api.account') }}"
dan untuk aplikasi utama akan terlihat seperti ini:
redirect(url_for('account_api.account'))
Jika tidak, perpustakaan werkzeug akan membuat kesalahan.
sumber
Satu cara lain untuk melakukan ini bisa dengan lazy loading , di mana Anda akan secara eksplisit melampirkan fungsi tampilan berdasarkan kebutuhan.
sumber