Flask Blueprints tam olarak nedir?


180

Ben var okumak resmi Matara belgelerine Mavikopyalara üzerinde ve hatta bir veya iki bunları kullanarak blog mesajları.

Bunları web uygulamamda bile kullandım, ancak ne olduklarını veya bir bütün olarak uygulamama nasıl uyduklarını tam olarak anlamıyorum. Uygulamamın bir örneğine nasıl benziyor, ancak tam olarak değil mi? Dokümantasyon kapsamlı ancak benim için kıvılcım çıkarmak için sıradan bir açıklama veya aydınlatıcı bir benzetme arıyorum. Bir meslektaşım benden burada sormayı seçtiğim bir Flask planını açıklamamı istediğinde yeterince şaşırdım.

Yanıtlar:


287

Plan, bir web uygulamasının "bölümünü" oluşturmak için kullanılan bir şablondur. Bunu bir kalıp olarak düşünebilirsiniz:

Ondan yeni çıkarılmış altın madalyonlu bir madalyon kalıbı

Planı alabilir ve uygulamanıza çeşitli yerlerde uygulayabilirsiniz. Her uyguladığınızda, plan uygulamanızın sıva içinde yapısının yeni bir sürümünü oluşturacaktır.

# 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)

Bu, ağaçlarla çalışmak için basit bir kalıptır - ağaçlarla ilgilenen herhangi bir uygulamanın yapraklarına, köklerine ve halkalarına (yıllara göre) erişim sağlaması gerektiğini söyler. Kendi başına, içi boş bir kabuktur - bir uygulamadan etkilenene kadar yönlendiremez, yanıt veremez:

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")

Bir kez oluşturulduktan sonra register_blueprintfonksiyon kullanılarak uygulama üzerinde "etkilenebilir" - bu uygulama tarafından planın kalıbını tarafından belirtilen yerlerde "etkiler" url_prefix.


5
İşte planları kullanarak uygulama yapısı için güzel bir makale. exploreflask.com/tr/latest/blueprints.html
Devasish

5
Hala kafam karıştı. Bu aynı kod anlamına mı geliyor oak/leavesve fir\leavesgösterecek mi? Ayrıca, dize amacı nedir moldiçindeBlueprint("mold", __name__)
Codevalley

8
Evet, her ikisi de oak/leavesve fir/leavestarafından ele alınacaktır def leaves. "mold"planın adıdır ve güzergâhlara (ör. someBlueprint.routeNamevs. anotherBlueprint.routeName) atıfta bulunurken netleştirme için kullanılır .
Sean Vieira

2
url_prefixFonksiyondaki nasıl erişebilirim ? Mesela meşe mi köknar mı olduğunu kontrol etmek için? tree_mold.url_prefixbana birNone
Mellkor

3
@Mellkor - sadece kullanın url_for('.relative_route_name')(önde gelen noktayı not edin). Örneğin url_for('.roots'), bağlanan noktaların her birinde otomatik olarak doğru kapsamlandırılmış bir URL sağlar.
Sean Vieira

6

@Devasish'in yaptığı bir yorumda belirtildiği gibi , bu makale iyi bir cevap vermektedir:

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

Makaleden alıntı:

Buna bir örnek Facebook olabilir. Facebook Flask kullandıysa, statik sayfalar (oturum kapatılmış ev, kayıt, hakkında, vb.), Gösterge tablosu (yani haber akışı), profiller (/ robert / about ve / robert / photos) için planları olabilir, ayarları (/ settings / güvenlik ve / settings / gizlilik) ve daha fazlası. Bu bileşenlerin tümü genel bir düzeni ve stilleri paylaşır, ancak her birinin de kendi düzeni vardır.

Bu çok iyi bir yorum, özellikle de "Facebook Flask kullandıysa" bölümü. Blueprint'in gerçekte nasıl çalıştığını görselleştirmek için somut bir durum veriyor.


3

Ben de bunu kendim hallettim ve birkaç dokümantasyon kaynağını okuduktan sonra kafam karıştı. İlk başta, bazı şeyleri tanımladığınız ancak daha sonra tanımlamaktan endişelenmenize gerek olmayan C # / Java Uygulama stili gibi olduğunu düşündüm. Ancak, çok çok laymens (ve oldukça komik bugünkü olaylar) açısından bu sayfayı tökezledim. https://hackersandslackers.com/flask-blueprints/

Aslında bağlantıda belirtilen ve bana gerçek dünya kullanımı hakkında net bir fikir sağlayan bir fayda , uygulamayı etkili bir şekilde sadece kendi işleriyle ilgilenmesi gereken birkaç parçaya ayırabilir / bölebilirim . Böylece bazı tasarlanmış kapsülleme sağlar.

Düzenleme: Şu anda webapps kodumu segmentlere ayırmak için kullanıyorum. Bu da iyi bir karardı çünkü baş tasarımcı Vue.js'de ön uç yapmak istediğini fark ettim. Henüz kullanmadım ama proje dosyalarına bakmak çok daha dağınık görünecek ve muhtemelen birçok isme çarpışma eğilimli olacaktır.


0

Daha büyük projeler için, tüm kodlarınız aynı dosyada olmamalıdır. Bunun yerine daha büyük kodları, çoğunlukla işlevselliğe dayalı olarak ayrı bir dosyaya bölebilir veya bölebilirsiniz. Duvar oluşturan tuğlalar gibi.

Umarım bu yardımcı olmuştur. Bu teorik bir soru olduğu için kod yazmamak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.