15 maja 2007

Zaczynam z Django 4 - pierwsza strona

Czas najwyższy, żeby zobaczyć efekty jakiejś własnej pracy, bo jak do tej pory, to głównie automaty wykonywały za mnie wszystkie czynności.
Czas wykorzystać konfiguracje URL-i, którą już raz zmieniałem (plik urls.py). Pierwsza wprawka w DB (rozdział 3) po uproszczeniu przeze mnie wygląda następująco:


from django.http import HttpResponse
import datetime

def current_datetime(request):
html = "Jest %s" % datetime.datetime.now()
return HttpResponse(html)


Zapisujemy to do pliku views.py.
Warto sobie znowu na boku odpalić terminal i ./manage.py shell a potem: from mdjango.mbegin.views import *
(wszystkie kolejne sprawdzenia będę najpierw przeprowadzał w konsoli, więc nie będę juz pisał o jej odpalaniu).
Odpalamy current_datetime(), powinien nam się pojawić błąd. Wynika on z tego, że próbowałem wykorzystać konsolę do wypisania HTTPResponse.
Teraz już zmiana konfiguracji URL-i: dodajemy import pliku z widokami i konfiguracje przekierowania w przypadku wywołania adresu http://localhost:8080/czas/.
plik urls.py wygląda teraz tak:


from django.conf.urls.defaults import *
from mdjango.mbegin.views import *

urlpatterns = patterns('',
(r'^czas/', current_datetime),
(r'^admin/', include('django.contrib.admin.urls')),
)


I powoduje pokazanie....błędu. Przy okazji okazuje się jak django pokazuje błedy, jak dla mnie całkiem przejrzyście i tego właśnie bym oczekiwał od informacji o błędzie. Jest stos, jest zapytanie, jest konfiguracja. Chyba nie muszę już pisać o kolejnym plusie. Zauważyłem również możliwość przełączania pomiędzy trybami oglądania informacji o błędzie. Sam błąd to: AttributeError at /czas/ 'function' object has no attribute 'rindex' oznacza on, że DB jest do przodu w stosunku do mojego Ubuntu. Tak jak napisałem URL-e docelowe, można je pisać dopiero od wersji 0.96 a ja mam 0.95. Na razie daruję sobie podnoszenie wersji (warto znać różne metody obejścia problemu). Rozwiazaniem jest napisanie nazwy funkcji jako stringa poprzedzonego nazwą aplikacji i modułu. Więc ostatecznie wygląda to tak:


from django.conf.urls.defaults import *
from mdjango.mbegin.views import *

urlpatterns = patterns('',
(r'^czas/', 'mbegin.views.current_datetime'),
(r'^admin/', include('django.contrib.admin.urls')),
)


Przy okazji upraszczania zrobiłem jeszcze jeden błąd: W ramach upraszczania nie napisałem parametru request dla funkcji current_datetime, jest on oczywiście potrzebny. Po poprawieniu usterek widać skromną, ale własną, pierwszą stronę wykonaną przy uzyciu django. Teraz już pójdzie z górki, ale to już w następnym odcinku. A na dzisiaj ostatni element, żeby mieć poprawny czas, trzeba ustawić TIME_ZONE = 'Europe/Warsaw' (lub jak kto woli mieć ustawione) w settings.py, no chyba, że ktoś mieszka w tej samej strefie czasowej co Chicago

Brak komentarzy: