Apa itu Blueprint Flask, tepatnya?

180

Saya telah membaca dokumentasi Flask resmi tentang Cetak Biru dan bahkan satu atau dua posting blog tentang penggunaannya.

Saya bahkan sudah menggunakannya di aplikasi web saya, tetapi saya tidak sepenuhnya mengerti apa itu atau bagaimana mereka masuk ke dalam aplikasi saya secara keseluruhan. Bagaimana ini mirip dengan contoh aplikasi saya tetapi tidak cukup? Dokumentasinya komprehensif tetapi saya mencari penjelasan awam atau analogi yang mencerahkan untuk menyemangati saya. Saya cukup bingung ketika seorang rekan meminta saya untuk menjelaskan cetak biru Flask kepada mereka bahwa saya memilih untuk bertanya di sini.

JoshieSimmons
sumber

Jawaban:

287

Cetak biru adalah templat untuk membuat "bagian" aplikasi web. Anda bisa menganggapnya sebagai cetakan:

Cetakan medali dengan medali emas yang baru saja dilepas

Anda dapat mengambil cetak biru dan menerapkannya ke aplikasi Anda di beberapa tempat. Setiap kali Anda menerapkannya cetak biru akan membuat versi baru dari strukturnya di plester aplikasi Anda.

# An example
from flask import Blueprint

tree_mold = Blueprint("mold", __name__)

@tree_mold.route("/leaves")
def leaves():
    return "This tree has leaves"

@tree_mold.route("/roots")
def roots():
    return "And roots as well"

@tree_mold.route("/rings")
@tree_mold.route("/rings/<int:year>")
def rings(year=None):
    return "Looking at the rings for {year}".format(year=year)

Ini adalah cetakan sederhana untuk bekerja dengan pohon - dikatakan bahwa aplikasi apa pun yang berhubungan dengan pohon harus menyediakan akses ke daunnya, akarnya, dan cincinnya (berdasarkan tahun). Dengan sendirinya, ini adalah cangkang kosong - tidak dapat dirutekan, tidak dapat merespons, hingga terkesan pada aplikasi:

from tree_workshop import tree_mold

app.register_blueprint(tree_mold, url_prefix="/oak")
app.register_blueprint(tree_mold, url_prefix="/fir")
app.register_blueprint(tree_mold, url_prefix="/ash")

Setelah dibuat, itu mungkin "terkesan" pada aplikasi dengan menggunakan register_blueprintfungsi - ini "mengesankan" cetakan cetak biru pada aplikasi di lokasi yang ditentukan oleh url_prefix.

Sean Vieira
sumber
5
Berikut ini adalah artikel yang bagus untuk struktur aplikasi menggunakan cetak biru. exploreflask.com/en/latest/blueprints.html
Devasish
5
Saya masih bingung. Apakah itu berarti oak/leavesdan fir\leavesakan menunjukkan kode yang sama? Juga, apa tujuan dari string molddiBlueprint("mold", __name__)
Codevalley
8
Ya, keduanya oak/leavesdan fir/leavesakan ditangani oleh def leaves. "mold"adalah nama cetak biru dan digunakan untuk disambiguasi ketika merujuk ke rute (misalnya someBlueprint.routeNamevs. anotherBlueprint.routeName).
Sean Vieira
2
Bagaimana saya bisa mengakses url_prefixfungsi? Katakan, untuk mengecek apakah pohon ek atau cemara? tree_mold.url_prefixmemberi sayaNone
Mellkor
3
@Ellkor - cukup gunakan url_for('.relative_route_name')(perhatikan titik terkemuka). Misalnya, url_for('.roots')akan menyediakan URL dengan cakupan yang benar di setiap titik yang dipasang secara otomatis.
Sean Vieira
6

Sebagaimana ditunjukkan dalam komentar oleh @Devasish , artikel ini memberikan jawaban yang bagus:

http://exploreflask.com/en/latest/blueprints.html

Mengutip dari artikel:

Contohnya adalah Facebook. Jika Facebook menggunakan Flask, mungkin ada cetak biru untuk halaman statis (yaitu rumah keluar, daftar, tentang, dll.), Dasbor (yaitu feed berita), profil (/ robert / about dan / robert / foto), pengaturan (/ pengaturan / keamanan dan / pengaturan / privasi) dan banyak lagi. Semua komponen ini berbagi tata letak dan gaya umum, tetapi masing-masing memiliki tata letak sendiri juga

Ini adalah interpretasi yang sangat baik, terutama bagian "jika Facebook menggunakan Flask". Ini memberi kita situasi konkret untuk memvisualisasikan cara kerja Cetak Biru sebenarnya.

Tran Cuong
sumber
3

Saya sendiri baru saja menemukan ini dan bingung setelah membaca beberapa sumber dokumentasi. Pada awalnya saya pikir itu seperti gaya implementasi C # / Java di mana Anda mendefinisikan beberapa hal tetapi tidak perlu khawatir tentang hal itu mendefinisikannya nanti. Namun, saya menemukan halaman ini yang menempatkannya dalam istilah yang sangat sangat awam (dan kejadian hari ini sangat lucu).https://hackersandslackers.com/flask-blueprints/

Pada dasarnya satu manfaat yang disebutkan dalam tautan dan memberi saya gagasan yang jelas tentang penggunaannya di dunia nyata adalah bahwa saya dapat secara efektif mengatur / membagi secara logis aplikasi menjadi beberapa bagian yang hanya perlu mementingkan urusannya sendiri. Jadi itu menyediakan beberapa enkapsulasi yang dirancang.

Sunting: Saya sedang menggunakannya untuk membagi kode webapps saya. Itu adalah keputusan yang baik juga karena saya menemukan desainer utama ingin membuat tampilan depan di Vue.js. Yang saya belum pernah menggunakan tetapi melihat file proyek itu akan terlihat jauh lebih berantakan dan mungkin memberikan banyak penamaan tabrakan rawan.

LFMekz
sumber
0

Untuk proyek yang lebih besar, semua kode Anda tidak boleh berada dalam file yang sama. Alih-alih, Anda dapat mengelompokkan atau membagi kode yang lebih besar menjadi file terpisah, sebagian besar berdasarkan fungsionalitas. Seperti batu bata yang membentuk dinding.

Semoga ini bisa membantu. Karena ini adalah pertanyaan teoretis, tidak memposting kode.

Henshal B
sumber