2013-04-19 11 views
8

Właśnie zainstalowałem django i robię samouczek na ich stronie internetowej.Jak działa program manage.py?

Podążam za ich instrukcjami na linii poleceń i działają, ale zastanawiam się, dlaczego?

Na przykład można uzyskać dostęp do polecenia "manage.py startapp xyz", aby utworzyć pakiet, ale gdy zajrzę do pliku manage.py, zawiera on tylko następujący kod (dodany przez django, nie touch manage.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) 

Nie widzę żadnej metody dla startapp w manage.py lub gdziekolwiek indziej. Nie jestem pewien, czy jest to specyficzne dla django, czy też istnieje pewna podstawowa luka w mojej wiedzy na temat Pythona. Dziękuję Ci.

+4

spojrzałeś na kod 'execute_from_command_line()'? – monkut

+0

Przepraszam, pomyłkę. Uruchamiam te polecenia nie za pomocą wiersza poleceń, ale za pomocą wtyczki django pydev's eclipse. Wprowadziłem polecenie i otrzymałem wynik: Zakończono wykonanie "C: \ Users \ zyz \ workspace \ DjangoProject12 \ src \ manage.py startapp zxz". – user856358

+0

Eclipse ukrywa przed tobą szczegóły. W rzeczywistości nadal wywołuje metodę manage.py ze środowiska wiersza poleceń (nie znam szczegółów, przepraszam), więc program manage.py działa dokładnie tak, jakby był uruchamiany za pośrednictwem wiersza polecenia – J0HN

Odpowiedz

9

Musisz spojrzeć w django.core.management package; execute_from_command_line() function akceptuje parametry wiersza komend sys.argv i pobiera je z tego miejsca.

Po wpisaniu manage.py startapp xyz w wierszu poleceń, sys.argv jest ustawione na ['manage.py', 'startapp', 'xyz'].

Są one przekazywane do ManagementUtility instance, która ma .execute() method do wykonania rzeczywistego parsowania.

Cały pakiet django.core.management jest modułowy; .commands sub package zawiera różne standardowe polecenia dla narzędzia manage.py. django.core.management.commands.startapp obsługuje na przykład podkomendę startapp.

Powiązane problemy