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
- Django: Databázový model
- Django: Databázový model podruhé
- Django: Administrace
- Django: Prezentace dat
- Django: Prezentace dat podruhé
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.
Školení Google+ pro firmy

- Jak využít Google+ pro firemní komunikaci a marketing.
- Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
- Jak využít Google+ v souladu s pravidly užívání.
- Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.
Detailní informace o školení Google+ »
Seriál Hrajeme si s Djangem
- Django: Databázový model
- Django: Databázový model podruhé
- Django: Administrace
- Django: Prezentace dat
- Django: Prezentace dat podruhé
Přehled názorů
Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.









