Cum să dați corect comenzile
Despre o ocazie utilă de a face propriile comenzi pentru manage.py Am scris deja cu mult timp în urmă. Dar din moment ce le folosesc în mod regulat, de atunci au fost deja formate niște "reguli bune" pentru scrierea acestor comenzi. Una dintre ele - în interiorul metodei de executare a comenzii, nu trebuie să vă așteptați ca toate opțiunile pentru care ați scris chiar și valori implicite să fie prezente în cazul în sine.
Vă voi arăta un exemplu. Comanda tipică:
Dacă executați această comandă prin linia de comandă și fără opțiunea -fo. atunci totul va fi bine - optparse înlocuiește cu amabilitate valoarea implicită și poate fi folosit în condiții de siguranță.
Dar pentru a apela comenzile există o altă cale - în interiorul unui alt modul care utilizează funcția call_command din django.core.management. Și în acest caz, argumentele și opțiunile sunt transferate ca parametri ai funcției, iar valorile implicite specificate în opțiunea_list nu sunt luate în considerare. Ie dacă ați apelat call_command ("foobar") fără opțiunea foo. atunci codul se va rupe cu KeyError.
Dacă ați scris echipa, soluțiile sunt destul de simple.
Este posibil sau în execuție să se înregistreze parametrii și valorile în mod implicit în argumentele unei metode. Aici:
Sau, nu luați valoarea opțiunii direct pe cheia din dicționar și "hedge" prin obține:
Dar după cum puteți vedea, aceste două metode vă obligă să re-specificați valoarea implicită, ceea ce nu este convenabil și duce la erori nedorite.
Dar dacă echipa se află în cererea altcuiva, atunci sunteți dispus să utilizați această opțiune pentru a specifica toate opțiunile și chiar și valorile implicite ale căror rezultate sunt destul de satisfăcute. Nu este convenabil.
Biletul și patch-ul există deja, deci este posibil ca după un timp această caracteristică neplăcută a chemării echipelor să dispară. Să așteptăm.