2013-04-19 13 views
8

मैंने अभी django स्थापित किया है और मैं उनकी वेबसाइट पर ट्यूटोरियल कर रहा हूं।manage.py कैसे काम करता है?

मैं कमांड लाइन पर उनके निर्देशों का पालन कर रहा हूं और वे काम कर रहे हैं, लेकिन मुझे आश्चर्य है कि क्यों?

उदाहरण के लिए, आप 'manage.py startapp xyz' कमांड तक पहुंच सकते हैं और यह एक पैकेज बनाएगा, लेकिन जब मैं manage.py में देखता हूं, इसमें केवल निम्न कोड होता है (django द्वारा जोड़ा गया, मैंने नहीं किया स्पर्श करें.py.py

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoProject12.settings") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

मुझे manage.py या कहीं और में स्टार्टैप के लिए कोई विधि नहीं दिखाई दे रही है। मुझे यकीन नहीं है कि यह django विशिष्ट है या यदि मेरे अजगर ज्ञान में कुछ मौलिक अंतर है। धन्यवाद।

+4

क्या आपने 'execute_from_command_line()' कोड देखा था? – monkut

+0

क्षमा करें, मैं misspoke। मैं कमांड लाइन के माध्यम से इन आदेशों को नहीं चला रहा हूं, लेकिन ग्रहण के pydev की django प्लगइन के माध्यम से। मैंने कमांड डाला और आउटपुट के रूप में प्राप्त किया: "सी: \ उपयोगकर्ता \ zyz \ workspace \ DjangoProject12 \ src \ manage.py startapp zxz" निष्पादन समाप्त हुआ। – user856358

+0

ग्रहण सिर्फ आपके विवरण से छुपाता है। हकीकत में यह अभी भी कमांड-लाइन-जैसे पर्यावरण से प्रबंधन.py को आमंत्रित करता है (विवरण, माफ करना नहीं), इसलिए manage.py निष्पादित करता है जैसे कि यह कमांड लाइन – J0HN

उत्तर

9

आपको django.core.management package में देखने की आवश्यकता है; execute_from_command_line() functionsys.argv कमांड लाइन पैरामीटर स्वीकार करता है और इसे वहां से ले जाता है।

जब आप कमांड लाइन पर manage.py startapp xyz दर्ज करते हैं, sys.argv['manage.py', 'startapp', 'xyz'] पर सेट है।

इन्हें ManagementUtility instance पर सौंप दिया गया है, जिसमें वास्तविक पार्सिंग करने के लिए .execute() method है।

संपूर्ण django.core.management पैकेज मॉड्यूलर है; .commands sub package में manage.py उपकरण के लिए विभिन्न मानक आदेश शामिल हैं। उदाहरण के लिए django.core.management.commands.startappstartapp उप-आदेश संभालता है।

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