Přejít k navigační liště

Zdroják » Různé » Django: Administrace

Django: Administrace

Články Různé

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.

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.

Django

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).

Django

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.

Django

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).

Django v pojmenování souborů zastává princip konvence místo konfigurace, což znamená, že nemáme možnost určovat názvy hlavních souborů v aplikaci. Má to výhodu, že se v cizích projektech rychleji zorientujeme, protože budeme zhruba vědět, co který soubor obsahuje.

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.

Django

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.

Django

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).

Django

Django admin director

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.

Django

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.

Django

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

Příště se budeme zabývat podrobněji pohledy a šablonovacím systémem.

Komentáře

Subscribe
Upozornit na
guest
6 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
skrat

ahoj, bolo by pekne precitat si clanok o integraci pyjamas + django, plnokrvna klientska aplikacia v pyjamas s RPC smerujucim na django aplikaciu.

skrat

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

hynek

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.

Spiler

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.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.