2012-02-22 17 views
71

मैं अपना पहला फ्लास्क ऐप बना रहा हूं और मैं अपने आवेदन को व्यवस्थित करने का एक अच्छा, साफ पायथनिक तरीका नहीं समझ सकता। मैं अपने उदाहरण में एक ही .py फ़ाइल में सबकुछ नहीं रखना चाहता हूं। मैं अपने ऐप के प्रत्येक भाग को एक अलग मॉड्यूल में रखना चाहता हूं। चीजों को व्यवस्थित करने का एक अच्छा तरीका क्या होगा?अपेक्षाकृत बड़े फ्लास्क एप्लिकेशन को व्यवस्थित करने के लिए कैसे?

+3

मुझे यहां समझाया गया लेआउट पसंद है: http://flask.pocoo.org/docs/patterns/packages/ – obmarg

+1

वहां वे परिपत्र आयात का उपयोग कर रहे हैं जिन्हें मैं टालना चाहता हूं। – daniels

+0

सच है, लेकिन मुझे नहीं लगता कि यह ऐप। रूट सजावट का उपयोग करना चाहते हैं तो यह टालने योग्य है। – obmarg

उत्तर

78

मैं "Fbone" नामक एक बोतल बॉयलरप्लेट परियोजना, कृपया इसे बाहर की जाँच करने के लिए स्वतंत्र लग रहा है और कांटा :)

Fbone (बोतल की हड्डी) एक बोतल (अजगर microframework) टेम्पलेट/बूटस्ट्रैप/बॉयलरप्लेट अनुप्रयोग है बनाया है।

अवलोकन

  • खैर खाका का उपयोग कर बड़ा परियोजना के लिए बनाया गया है।
  • हॉट फ्रंटेंड फ्रेमवर्क के साथ एकीकृत करें: jQuery/html5boilerplate/बूटस्ट्रैप।
  • प्रसिद्ध SQLalchemy द्वारा समर्थित।
  • फ्लास्क-लॉगिन द्वारा मुश्किल "मुझे याद रखें" लागू करें।
  • फ्लास्क-wtform द्वारा वेब फॉर्म हैंडल करें।
  • फ्लास्क-परीक्षण और नाक के साथ यूनिट परीक्षण।
  • आसानी से कपड़े और mod_wsgi (उदाहरण शामिल) के माध्यम से तैनात।
  • i18n कुप्पी के कोलाहल से

btw, मैं सिर्फ इस wiki बोतल उपयोगी के साथ एक बड़ी परियोजना के निर्माण पर पाया, कृपया यह जाँच!

+1

भयानक बॉयलरप्लेट, अच्छा काम! –

+0

वास्तव में इस तरह। धन्यवाद! – jdsantiagojr

+0

रीडमे में विस्तृत रूप से 'fab d' चलाने से पहले, आपको 'वर्चुअल एनवी/बिन/एक्टिवेट' – JRG

20

फ्लास्क 0.7 लागू Blueprints। मुख्य अनुप्रयोग ऑब्जेक्ट आयात किए बिना route सजावट का उपयोग करने के लिए वे बहुत अच्छे हैं।

+1

एक मॉड्यूल से ब्लूप्रिंट अलग कैसे है? – dcolish

+1

तकनीकी रूप से, ब्लूप्रिंट ब्लूप्रिंट क्लास का एक उदाहरण है। वे एक या अधिक मॉड्यूल का विस्तार कर सकते हैं, या कई ब्लूप्रिंट एक ही मॉड्यूल में सह-अस्तित्व में हो सकते हैं। ब्लूप्रिंट के मॉड्यूल या पैकेज को जानने के लिए दृश्यों के पीछे कुछ जादू है, ताकि 'टेम्पलेट्स' और 'स्थिर' फ़ोल्डरों को ढूंढ सकें। –

+1

मैंने अपने फ्लास्क हड्डी प्रोजेक्ट में ब्लूप्रिंट को एकीकृत किया है, मेरे उत्तर pls देखें। – imwilsonxu

12

मैं बड़े फ्लास्क प्रोजेक्ट (पाइथन कोड की 5000 लाइनें और यह केवल आधे-समाप्त) पर काम कर रहा हूं। ग्राहक परियोजना मॉड्यूलर बनना चाहता है, तो मैं इस apporach ले लिया:

मेरे फ़ोल्डर संरचना इस तरह दिखता है:

├── __init__.py 
├── modules.yml 
├── config 
├── controllers 
│ └── ... 
├── lib: Common functions I use often 
│ └── ... 
├── models 
│ └── ... 
├── static: All static files 
│ ├── css 
│ ├── img 
│ └── js 
└── templates: Jinja2 templates 
    └── ... 

modules.yml में मैं नाम और URL सहित मेरी मॉड्यूल परिभाषित करते हैं। इस तरह से ग्राहक एक पाइथन फ़ाइल को छूए बिना मॉड्यूल को सक्षम/अक्षम करने में सक्षम है। इसके अलावा, मैं मॉड्यूल सूची के आधार पर मेनू उत्पन्न करता हूं। सम्मेलन के अनुसार प्रत्येक मॉड्यूल में controllers/ में इसका अपना पायथन-मॉड्यूल होता है जो को models/ से लोड करेगा। प्रत्येक नियंत्रक Blueprint को नियंत्रक के नाम के रूप में संग्रहीत करता है। जैसे एक user मॉड्यूल के लिए, मैं controllers/user.py में है:

# Module name is 'user', thus save Blueprint as 'user' variable 
user = Blueprint('user', __name__) 

@user.route('/user/') 
def index(): 
    pass 

इस तरह, मैं अपने __init__.py और भार में modules.yml पढ़ सकते हैं और रजिस्टर सभी सक्षम मॉड्यूल गतिशील कर सकते हैं:

# Import modules 
for module in modules: 

    # Get module name from 'url' setting, exculde leading slash 
    modname = module['url'][1:] 

    try: 
     # from project.controllers.<modname> import <modname> 
     mod = __import__(
      'project.controllers.' + modname, None, None, modname 
     ) 
    except Exception as e: 
     # Log exceptions here 
     # [...] 

    mod = getattr(mod, modname) # Get blueprint from module 
    app.register_blueprint(mod, url_prefix=module['url']) 

मुझे आशा है कि, इस किया जा सकता है आपके लिए कुछ प्रेरणा :)

+0

आप अपनी टेस्ट फाइलें कहां डालते हैं? – Alp

+1

ऊपर वर्णित संरचना वास्तव में प्रोजेक्ट नाम ('project_name /') के साथ एक उपनिर्देशिका है। एक 'परीक्षण/'फ़ोल्डर और एक' स्क्रिप्ट/'फ़ोल्डर (निष्पादन योग्य स्क्रिप्ट के लिए) भी है।'परीक्षण /' के लिए उत्तर में समान संरचना का उपयोग करने के लिए चालाक होगा: मॉडल परीक्षणों के लिए 'परीक्षण/मॉडल /', नियंत्रक परीक्षणों के लिए 'परीक्षण/नियंत्रक /', आप इसे नाम दें। संरचना को बनाए रखने के लिए उसे कुछ ओवरहेड की आवश्यकता होगी लेकिन आपको आवश्यक फाइलों को ढूंढना बहुत आसान होगा। – msiemens

15

इस विषय पर मैट राइट के wonderful post पढ़ने के लिए सुनिश्चित करें।

पद विशेषताएं:

  1. बड़े कुप्पी परियोजनाओं

  2. An example application on Github

  3. सामान्य में सबसे अच्छा डिजाइन प्रथाओं का वर्णन के लिए एक संरचना का वर्णन है जब यह बड़ी बात आती है वेब ऐप्स, एमवीसी पैटर्न, ऐप कारखानों, सेवाओं और डेटा माइग्रेशन जैसे कुछ (सबसे दिलचस्प फीचर आईएमएचओ) नाम।

2

मैं एक बोतल एप्लिकेशन खरोंच से yapper बनाया है और दोनों दृश्यपटल और बैकएंड विकास के लिए घूंट के साथ यह एकीकृत किया है। यह एक साधारण ब्लॉग इंजन है लेकिन आवश्यकताओं के अनुसार विकास के लिए आसानी से संशोधित किया जा सकता है। यह Blueprints का उपयोग कर अच्छी तरह से संरचित है।

चेकआउट परियोजना पृष्ठ yapper

2

मैं बोतल के ऊपर एक बने एक सामाजिक नेटवर्क पर काम किया। मेरी परियोजना के बारे में विशेष बात यह थी कि सर्वर पूरी तरह से एपीआई एंडपॉइंट्स की सेवा कर रहा है और फ्रंटएंड एक पेज बैकबोन ऐप है। बोतल संरचना मैं ले लिया निम्नलिखित है:

├── app │ ├── api
│ │ ├── auth.py │ │ └── ... │ ├── app.py │ ├── common │ │ ├── constants.py │ │ ├── helpers.py │ │ ├── response.py │ │ └── ... │ ├── config.py │ ├── extensions.py │ ├── frontend │ │ └── controllers.py │ ├── static │ │ └── ... │ ├── templates │ │ ├── app.html │ │ └── ... │ └── users │ ├── UserConstants.py │ ├── UserForms.py │ ├── UserHelpers.py │ ├── UserModels.py │ └── __init__.py ├── alembic | ├── version │ └── ... ├── tests │ └── ...

आप अधिक गहराई के बाद मैं विषय here पर लिखा पढ़ सकते हैं। मैंने इसे अपने स्वयं के फ़ोल्डर में अलग-अलग कार्यात्मक क्षेत्रों को अलग करने के लिए और अधिक सहज महसूस किया।

मैंने कुछ समय पहले कोड पर काम किया और इसे पूरी तरह से सोर्स किया! आप इसे on github देख सकते हैं।

+0

धन्यवाद। अच्छा लगता है। – daniels

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