Django: Administrace

Automaticky generovanou administraci lze označit za killer feature Djanga. Umožňuje uživatelům jednoduše přidávat, upravovat a mazat data v projektu, aniž bychom museli programovat vlastní správcovská rozhraní. V dnešním článku si ukážeme, jak takové administrační rozhraní v Djangu vytvořit.
Seriál: Hrajeme si s Djangem (16 dílů)
- Django: Úvod a instalace 14. 8. 2009
- Django: Nastavení projektu a první pokusy 21. 8. 2009
- Django: Databázový model 28. 8. 2009
- Django: Databázový model podruhé 4. 9. 2009
- Django: Administrace 11. 9. 2009
- Django: Prezentace dat 18. 9. 2009
- Django: Prezentace dat podruhé 25. 9. 2009
- Django: Zpracovávání formulářů 2. 10. 2009
- Django: Autentizace a autorizace 9. 10. 2009
- Django: Nahrávání souborů 16. 10. 2009
- Django: Zabudované aplikace 23. 10. 2009
- Django: Rozšiřování možností Djanga 30. 10. 2009
- Django: Internacionalizace 6. 11. 2009
- Django: Nasazování projektu 13. 11. 2009
- Django: Kešování a škálování 20. 11. 2009
- Django: Závěr 27. 11. 2009
Nálepky:
V předchozích dvou dílech jsme si definovali několik datových modelů. Budeme chtít, aby fiktivní zaměstnanci videopůjčovny mohli záznamy v těchto modelech spravovat bez naší asistence. Začneme aktivováním administrátorské aplikace v projektu a správným nastavením URL.
Zprovoznění administrace
Opět si nejprve otevřeme soubor settings.py
z adresáře projektu a upravíme pár konstant. Mezi položky v INSTALLED_APPS
přidáme 'django.contrib.admin'
, konstanta by pak měla vypadat například takto:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'hrajeme_si.video_store', )
Dále máme možnost změnit konstantu LANGUAGE_CODE
, která určuje jazyk projektu. Díky tomu bude administrace v takovém jazyce, jaký si zvolíme. Pro češtinu je nastavení kód LANGUAGE_CODE = 'cs'
, pro slovenštinu LANGUAGE_CODE = 'sk'
. Ať už si vybereme jazyk jakýkoliv, neměli bychom zapomenout synchronizovat databázi:
$ python manage.py syncdb
Creating table django_admin_log
Installing index for admin.LogEntry model
Po nastavení nám zbývá ještě provázat administraci s URL. Proto je potřeba na konec souboru url.py
připsat tento kód:
from django.contrib import admin admin.autodiscover() urlpatterns += patterns('', ('^admin/', include(admin.site.urls)), # Django 1.0: ('^admin/(.*)', admin.site.root), )
Zavoláním metody autodiscover
se do administrace načtou modely z INSTALLED_APPS
, čímž je připravena k použití. V komentáři je ukázáno, jak administraci zprovoznit ve starší verzi Djanga. Standardní cestou je /admin/
, takže stačí nastartovat vývojový server ( python manage.py runserver
) a na adrese http://127.0.0.1:8000/admin/ uvidíme přihlašovací dialog.
Na této stránce se přihlásíme pomocí administrátorského jména a hesla, které jsme si vytvořili ve třetím dílu seriálu. Pokud jste se vytváření vyhnuli nebo přihlašovací údaje mezitím zapomněli, máte možnost si pomocí příkazu python manage.py createsuperuser
vytvořit nové.
Ovládání
Po přihlášení uvidíme administrátorské rozhraní se třemi základními modely: skupiny (groups), uživatelé (users) a weby (sites).
Aplikace weby nám umožňuje projekt provozovat na více doménách najednou a na každé doméně udržovat jiný obsah. Prozatím se tím nebudeme zabývat. Aplikace uživatelé obsahuje ve výchozím nastavení pouze našeho administrátora, můžeme však přidat i běžné uživatele. Těm se později dají jednoduše přidělovat oprávnění pomocí uživatelských skupin. Hesla uživatelů se standardně ukládají jako osolený SHA-1 hash, což je považováno za poměrně bezpečné.
Záznamy lze prohlížet, dá se v nich vyhledávat, filtrovat je, libovolně je upravovat a mazat.
Veškeré úpravy se zaznamenávají a jsou vypisovány v přehledu na titulní straně.
Zavedení modelů do administrace
Aby se náš model zobrazil v administraci a my s ním mohli manipulovat, je potřeba ho do administrace registrovat. K tomu slouží soubor admin.py
, jejž si vytvoříme v adresáři s aplikací ( video_store
).
Nejjednodušší zavedení modelu vypadá takto:
from django.contrib import admin from models import Store, Film, Director admin.site.register(Store)
To vytvoří v administraci další položku, která je už plně funkční — po kliknutí na odkaz Provozovny můžeme vidět naše dvě přidané pobočky. Všimněte si, že se používají vyplněné údaje z meta vlastností modelu verbose_name
a verbose_name_plural
ze souboru video_store/models.py
.
Takový přehled je ale příliš strohý. Chtěli bychom vidět rovnou i jednotlivé adresy, bez toho, abychom museli otevírat náhled konkrétní pobočky. Nahradíme tedy poslední řádek v souboru video_store/admin.py
za následující kód:
class StoreAdmin(admin.ModelAdmin): list_display = ('store', 'address', 'city', 'postal_code') admin.site.register(Store, StoreAdmin)
V tomto kódu jsme zdědili třídu ModelAdmin
, která reprezentuje náš model v administraci. Atribut list_display
ovlivňuje zobrazení sloupců ve výpisu a my ho přepsali za vlastní. Posledním řádkem jsme opět registrovali model s pomocí vlastní verze třídy ModelAdmin
.
Teď se podíváme na další dva modely, Film
a Director
. Registrujeme je podobně jako v předchozím případě a přidáme několik funkcí navíc:
class FilmAdmin(admin.ModelAdmin): list_display = ('name_czech', 'name_original', 'year', 'director', 'format') list_filter = ('format', 'store') search_fields = ['name_czech', 'name_original'] admin.site.register(Film, FilmAdmin) class DirectorAdmin(admin.ModelAdmin): search_fields = ['name'] admin.site.register(Director, DirectorAdmin)
Máme tu dva nové atributy: list_filter
a search_fields
. Pomocí atributu list_filter
zobrazíme na pravém boku filtrování, můžeme teď filtrovat filmy dle formátu filmu a pobočky, ve které jsou dostupné. Druhý atribut, search_fields
, nám vytvoří jednoduché vyhledávání podle daných kritérií. Vyhledávání je zapnuté i u modelu s režiséry. Pozor, search_fields
se zadává jako seznam (hranaté závorky) místo n-tice (kulaté závorky).
Můžeme teď zkusit přidat nějaké filmy. Stačí kliknout na odkaz přidat a vyplnit údaje. Všimněte si, že již máme předvyplněnou cenu (parametr default
) a že se vztahy zobrazují jako výběry z jedné (one-to-many) nebo více (many-to-many) položek. Pokud by se nám to nelíbilo, můžeme to změnit na klasické textové políčko pomocí atributu raw_id_fields
. Kliknutím na malé plus můžeme přidat další záznam do odpovídajícího modelu.
Pomocí atributů fields
nebo exclude
máme možnost specifikovat, které části modelu chceme použít. Kompletní popis včetně příkladů naleznete v oficiální dokumentaci.
Přepisování šablon administrace
Na závěr si ukážeme, jak zasahovat do šablon, aniž bychom přepisovali instalaci Djanga. Vlevo nahoře je v české verzi nápis Správa systému Django, který přepíšeme na něco vhodnějšího. Nejprve je potřeba zjistit, kam se Django nainstalovalo (v mém případě to byl adresář /usr/lib/python2.5/site-packages/django/
) a poté přejít do podadresáře contrib/admin/templates/admin
. Ten obsahuje šablony administrace.
V našem projektu si vytvoříme v adresáři templates
podadresář admin
(opět se jedná o konvenci), do kterého zkopírujeme soubor base_site.html
. Ten by měl obsahovat následující řádek:
<h1 id="site-name">{% trans 'Django administration' %}</h1>
Tento řádek přepíšeme na:
<h1 id="site-name">Videopůjčovny s. r. o.</h1>
… a máme upravený nadpis administrace.
Stejně tak můžeme jednoduše modifikovat veškeré ostatní části administrace podle potřeby. Dá se dokonce pro každý náš model nebo aplikaci vytvořit specifickou šablonu. Stačí vzít příslušnou šablonu z: app_index.html
, change_form.html
, change_list.html
, delete_confirmation.html
, object_history.html
, nahrát ji do adresáře templates/admin/aplikace/
, tedy v našem případě templates/admin/video_store/
a upravit ji.
Související odkazy
- Administrace na Djangoproject.com
- Šestá kapitola v The Definitive Guide to Django
- Ukázkový soubor ke stažení.
Příště se budeme zabývat podrobněji pohledy a šablonovacím systémem.
ahoj, bolo by pekne precitat si clanok o integraci pyjamas + django, plnokrvna klientska aplikacia v pyjamas s RPC smerujucim na django aplikaciu.
Pyjamas bohužel neznám, takže nemůžu sloužit.
pyjamas je python>javascript crosscompiler a UI toolkit, inspirovany GWT. ak by si mal zaujem tak to mozme spolu nejak zhotovit, a napises o tom clanok
http://gdwarner.blogspot.com/…utorial.html
Díky za nabídku, vypadá to zajímavě, ale nemyslím si, že jsem správná osoba. O dané technologii naprosto nic nevím a už teď to psaní těžko stíhám. Takže se omlouvám, ale zájem nemám.
Po vytvoření souboru admin.py je nutné restartovat vývojový server (python manage.py runserver), jinak si server souboru nevšimne. (django 1.1.1)
Zkusil jsem všechno možné, včetně odhlášení a přihlášení, stažení kompletní sbalené ukázky, čtení jiné dokumentace, všechno marné.
Kromě tohoto byl popis od počátku kurzu naprosto dostatečný, krásně jednoduchý a přehledný.
Děkuji.
Dobry den,
na zacatek chci velice podekovat autorovi za exkluzivni navod ktery mi velice pomaha pri mem studiu djanga.
Ale ted k veci muj problem spociva v tom ze po vytvoreni administratora tak jak je uvedeno v navodu mi zle zobrazit pozue stranka http://127.0.0.1:8000/admin/ dale uz se nedostanu. Jakekoliv jine pokusy meli zanasledek vyhozeni chybu 404 page not found. Dival jsem se po diskuzich ale nemuzu najit duvod mel jsem za to ze django administracni rozhrani garantuje celistve a nemusim dodelavat zadne templaty.
Nevite nekdo kde delam chybu? Velice dekuji za odpoved.
S.