फ्लास्क ब्लूप्रिंट क्या हैं, बिल्कुल?


180

मैं है पढ़ आधिकारिक बोतल प्रलेखन ब्लूप्रिंट पर और यहां तक कि एक या दो उन्हें प्रयोग पर ब्लॉग पोस्ट।

मैंने उन्हें अपने वेब ऐप में भी इस्तेमाल किया है, लेकिन मुझे पूरी तरह से समझ में नहीं आता है कि वे क्या हैं या वे एक पूरे के रूप में मेरे ऐप में कैसे फिट होते हैं। यह मेरे ऐप के उदाहरण के समान है लेकिन काफी नहीं है? प्रलेखन व्यापक है, लेकिन मैं इसे समझने के लिए आम आदमी की व्याख्या या ज्ञानवर्धक सादृश्य चाहता हूँ। जब एक सहकर्मी ने मुझे उनसे एक फ्लास्क खाका समझाने के लिए कहा, तो मैं यहाँ आने के लिए पर्याप्त रूप से चिंतित था।

जवाबों:


287

एक खाका एक वेब एप्लिकेशन के "अनुभाग" को उत्पन्न करने के लिए एक टेम्पलेट है। आप इसे एक साँचे के रूप में सोच सकते हैं:

एक स्वर्ण पदक के साथ एक पदक मोल्ड नए सिरे से हटा दिया गया

आप ब्लूप्रिंट ले सकते हैं और इसे अपने आवेदन में कई स्थानों पर लागू कर सकते हैं। हर बार जब आप इसे लागू करते हैं तो ब्लूप्रिंट आपके एप्लिकेशन के प्लास्टर में इसकी संरचना का एक नया संस्करण तैयार करेगा।

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

यह पेड़ों के साथ काम करने के लिए एक सरल सांचा है - यह कहता है कि पेड़ों से संबंधित कोई भी एप्लिकेशन इसकी पत्तियों, इसकी जड़ों और इसके छल्ले (वर्ष के अनुसार) तक पहुंच प्रदान करना चाहिए। अपने आप से, यह एक खोखला खोल है - यह मार्ग नहीं कर सकता है, यह प्रतिक्रिया नहीं दे सकता है, जब तक कि यह एक आवेदन पर प्रभावित न हो:

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

एक बार जब यह बनाया जाता है, तो यह register_blueprintफ़ंक्शन का उपयोग करके एप्लिकेशन पर "प्रभावित" हो सकता है - यह "निर्दिष्ट किए गए स्थानों पर एप्लिकेशन पर ब्लूप्रिंट के मोल्ड को" प्रभावित करता है url_prefix


5
यहां ब्लूप्रिंट का उपयोग करके एप्लिकेशन संरचना के लिए एक अच्छा लेख है। एक्स्प्लिफ़ैस्लास्का। इन
ब्लेप्रिंट।

5
मैं अभी भी उलझन में हूं। क्या इसका मतलब है oak/leavesऔर fir\leavesएक ही कोड को इंगित करेगा? इसके अलावा, क्या स्ट्रिंग का उद्देश्य है moldमेंBlueprint("mold", __name__)
Codevalley

8
हाँ, दोनों oak/leavesऔर fir/leavesद्वारा नियंत्रित किया जाएगा def leaves"mold"ब्लूप्रिंट का नाम है और इसका उपयोग मार्गों (जैसे someBlueprint.routeNameबनाम anotherBlueprint.routeName) के संदर्भ में अव्यवस्था के लिए किया जाता है ।
सीन विएरा

2
मैं url_prefixफ़ंक्शन में कैसे पहुंच सकता हूं ? कहो, यह जांचने के लिए कि यह ओक या देवदार है? tree_mold.url_prefixमुझे एक देता हैNone
Mellkor

3
@ मेल्कोर - बस url_for('.relative_route_name')(प्रमुख बिंदु पर ध्यान दें) का उपयोग करें। उदाहरण के लिए, url_for('.roots')स्वचालित रूप से माउंट किए गए प्रत्येक बिंदु पर एक सही ढंग से स्कूप किया गया URL प्रदान करेगा।
सीन विएरा

6

जैसा कि @Devasish द्वारा एक टिप्पणी में बताया गया है , यह लेख एक अच्छा जवाब प्रदान करता है:

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

लेख से उद्धरण:

इसका एक उदाहरण फेसबुक होगा। यदि फेसबुक फ्लास्क का उपयोग करता है, तो उसके स्थैतिक पृष्ठों (अर्थात हस्ताक्षरित-आउट होम, रजिस्टर, अबाउट आदि) के लिए ब्लूप्रिंट हो सकते हैं, डैशबोर्ड (यानी न्यूज फीड), प्रोफाइल (/ रोबर्ट / के बारे में और / रॉबर्ट / फोटो), सेटिंग्स (/ सेटिंग्स / सुरक्षा और / सेटिंग्स / गोपनीयता) और कई और अधिक। ये सभी घटक एक सामान्य लेआउट और शैलियों को साझा करते हैं, लेकिन प्रत्येक का अपना लेआउट भी है

यह एक बहुत अच्छी व्याख्या है, विशेष रूप से "अगर फेसबुक ने फ्लास्क का उपयोग किया है" तो यह हिस्सा है। यह हमें यह कल्पना करने के लिए एक ठोस स्थिति देता है कि ब्लूप्रिंट वास्तव में कैसे काम करता है।


3

मैं भी बस खुद को इस तरह ठोकर खाई और प्रलेखन स्रोतों के कुछ पढ़ने के बाद उलझन में था। पहले मुझे लगा कि यह C # / Java इंप्लीमेंटेशन स्टाइल की तरह है जहाँ आप कुछ सामान को परिभाषित करते हैं लेकिन बाद में इसे खराब करने के बारे में चिंता करने की ज़रूरत नहीं है। हालांकि, मैंने इस पृष्ठ को ठोकर मार दी, जो इसे बहुत लेटमेंस (और काफी प्रफुल्लित करने वाली वर्तमान घटनाओं) शब्दों में डालता है। https://hackersandslackers.com/flask-blueprints/

अनिवार्य रूप से एक लाभ जो लिंक में उल्लिखित है और मुझे यह स्पष्ट पता चलता है कि यह वास्तविक दुनिया का उपयोग है कि मैं प्रभावी रूप से तार्किक रूप से एप्लिकेशन को कई हिस्सों में व्यवस्थित / विभाजित कर सकता हूं, जिसे केवल अपने मामलों से संबंधित होने की आवश्यकता है। तो यह कुछ डिज़ाइन किए गए एनकैप्सुलेशन प्रदान करता है।

संपादित करें: मैं वर्तमान में इसका उपयोग मेरे वेब कोड को खंडित करने के लिए कर रहा हूं। यह भी अच्छा निर्णय था क्योंकि मैंने पाया कि प्रमुख डिजाइनर Vue.js. जो मैंने अभी तक इस्तेमाल किया है, लेकिन यह प्रोजेक्ट फ़ाइलों को देखकर कहीं अधिक गड़बड़ है और शायद कई नामकरण टक्कर प्रवण प्रदान करेगा।


0

बड़ी परियोजनाओं के लिए, आपका सभी कोड एक ही फ़ाइल में नहीं होना चाहिए। इसके बजाय आप बड़े कोड को अलग-अलग फ़ाइल में विभाजित या विभाजित कर सकते हैं, अधिकतर कार्यक्षमता पर आधारित है। जैसे दीवार बनाने वाली ईंटें।

आशा है कि इससे मदद मिली। चूंकि यह एक सैद्धांतिक प्रश्न है, कोई कोड पोस्ट नहीं किया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.