2012-07-13 9 views
21

मैं फ्लास्क के साथ एक सरल, लेकिन मामूली अनुप्रयोग बनाने की कोशिश नहीं कर रहा हूं और मैं ऐसी स्थिति में चल रहा हूं जो दस्तावेज़ों में अच्छी तरह से समझाया नहीं गया है।फ्लास्क अनुप्रयोगों का ढांचा

मैं चाहूँगा मेरे ऐप विभिन्न मॉड्यूल के बीच विभाजित किया जाना है, लेकिन ऐसा लगता है कि यह मुख्य मॉड्यूल के अलावा कोई अन्य जगह से मुख्य app वस्तु (या dbflask-sqlalchemy से) तक पहुँचने के लिए मुश्किल है। ऐसा लगता है कि आपको इसे वैश्विक रूप से इलाज करने का अपना तरीका लिखना है कि सबकुछ तक पहुंच है, जिसके लिए कुछ संदिग्ध कोड और कुछ समय की आवश्यकता है।

app और db दोनों स्तर पर बनाए जाते हैं जहां मुख्य एप्लिकेशन तत्काल होता है और प्रत्येक उदाहरण मानता है कि वे शीर्ष स्तर पर उपलब्ध हैं। लेकिन अगर मैं विभिन्न मॉड्यूल हैंडलर को विभिन्न मॉड्यूल में विभाजित करता हूं, तो मैं @app.route सजावट का उपयोग करने की क्षमता खो देता हूं। मैं app.add_url_rule('/...', some.module...) के साथ उस पर काम कर सकता हूं, लेकिन फिर, उस फ़ंक्शन को ऐप पास नहीं किया गया है।

db के साथ वही बात होती है - मुझे नहीं पता कि मुझे इसे g में चिपकाना चाहिए, या किसी भी तरह app के माध्यम से इसे सुलभ बनाना चाहिए। ऐसा करने से मॉडलों को एक अलग मॉड्यूल में स्थानांतरित करने में मेरी मदद नहीं होती है - हालांकि मुझे आयात करते समय db तक कैसे पहुंचाया जा सकता है? सभी उदाहरण फिर से मानते हैं कि यह स्थानीय चर के रूप में उपलब्ध है।

क्या मुझे कुछ स्पष्ट याद आ रही है, या क्या मैं यहां गलत कार्य के लिए फ्लास्क का उपयोग करने की कोशिश कर रहा हूं?

+0

सजावटी बस फ़ंक्शन रैपर हैं। आप एक वर्ग बना सकते हैं जो सभी सर्वर तर्क को समाहित करता है और कक्षा के अंदर 'डीबी' और' ऐप 'चर को स्टोर करता है। – Blender

+0

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

+0

आप ब्लूप्रिंट – user956424

उत्तर

19

आपके प्रश्न का उत्तर ब्लूप्रिंट है। वास्तव में, यदि आप दस्तावेज़ीकरण को देखते हैं, तो यह उल्लेख किया गया है कि मॉड्यूल में अनुप्रयोग के विभाजन को सक्षम करने के लिए ब्लूप्रिंट हैं।

नमूना कोड:

from flask import Blueprint 

    mod = Blueprint(blueprint_name, __name__, template_folder="folder_name" 
        static_folder="folder_name") 

    @mod.route('/mymodule') 
    def view(): 
     # your code 

app.py

from yourmodule import mod 

    app.register_blueprint(mod) 

में इस मॉड्यूल में विभाजित करने के लिए एप्लिकेशन सही तरीका है। अधिक जानकारी के लिए ब्लूप्रिंट दस्तावेज़ देखें।

इसके अलावा यदि आपको किसी अन्य मॉड्यूल में ऐप तक पहुंचने की आवश्यकता है, तो आपको ऐप के current_app प्रॉक्सी का उपयोग करना चाहिए।

from flask import current_app 

चेक बाहर इस document जो कुप्पी के निर्माता द्वारा बड़ी परियोजनाओं के लिए मॉड्यूल में कुप्पी एप्लिकेशन को विभाजित करने के लिए कैसे मार्गदर्शन करता है।

+0

दस्तावेज़ीकरण के लिए बहुत अच्छा लिंक! ;) –

+1

@ इग्नास बी। धन्यवाद!मेरे द्वारा मूल बड़े फ्लास्क ऐप संरचना के साथ जिथब पर इस रेपो को देखें https://github.com/codecool/flask-app- संरचना – codecool

+0

एक नज़र डालेंगे! ;) –

2

आप को देखा है नया blueprintsfeature (मैं इसे अभी तक उपयोग नहीं किया है, लेकिन लगता है कि इस अपने मामले में सहायक हो सकता है)।

संबंधित मुद्दे