2013-04-19 11 views
8

Ho appena installato django e sto facendo il tutorial sul loro sito web.Come funziona manage.py?

Sto seguendo le loro istruzioni sulla riga di comando e stanno funzionando, ma mi chiedo perché?

Ad esempio, è possibile accedere al comando "manage.py startapp xyz" e creerebbe un pacchetto, ma quando guardo in manage.py, contiene solo il seguente codice (aggiunto da django, non l'ho fatto 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) 

Non vedo alcun metodo per startapp in manage.py o altrove. Non sono sicuro se questo è specifico per django o se c'è qualche lacuna fondamentale nella mia conoscenza di Python. Grazie.

+4

hai visto il codice 'execute_from_command_line()'? – monkut

+0

Scusa, ho misspoke. Sto eseguendo questi comandi non tramite la riga di comando, ma tramite il plugin django di pydev di eclipse. Ho inserito il comando e ottenuto come risultato: terminata l'esecuzione "C: \ Users \ zyz \ workspace \ DjangoProject12 \ src \ manage.py startapp zxz". – user856358

+0

Eclipse nasconde solo i dettagli da te. In realtà invoca ancora manage.py da un ambiente simile a una riga di comando (non conosco i dettagli, scusa), quindi manage.py funziona esattamente come se fosse lanciato tramite la riga di comando – J0HN

risposta

9

È necessario cercare nello django.core.management package; il execute_from_command_line() function accetta i parametri della riga di comando sys.argv e lo prende da lì.

Quando si immette manage.py startapp xyz nella riga di comando, sys.argv è impostato su ['manage.py', 'startapp', 'xyz'].

Questi sono consegnati a un ManagementUtility instance, che ha un .execute() method per eseguire l'analisi corrente.

L'intero pacchetto django.core.management è modulare; il .commands sub package contiene i vari comandi standard per lo strumento manage.py. django.core.management.commands.startapp gestisce il sottocomando startapp, ad esempio.

Problemi correlati