Wykorzystaj możliwości Django w swoim projekcie!
Jak zainstalować Django?
Jak skonfigurować framework i dopasować go do swoich potrzeb?
Jak uruchomić Django na Google App Engine?
Django nie jest kolejnym frameworkiem napisanym w języku PHP. To elitarne rozwiązanie, wykorzystujące język Python, oparte na wzorcu projektowym MVC. Pierwotnie Django zostało opracowane z myślą o stronach 'prasowych', z dużą ilością newsów. Pierwsza publiczna wersja ujrzała światło dzienne w 2005 roku. Od tego czasu Django odnotowuje ciągły wzrost popularności, a wachlarz jego zastosowań znacznie się rozrósł!
Dzięki tej książce również Ty będziesz mógł wykorzystać ten framework w swoim projekcie! Sprawdzona formuła książki, kładąca nacisk na ćwiczenia, pozwoli Ci błyskawicznie opanować sposób instalacji oraz stworzyć i skonfigurować Twój własny projekt. Dowiesz się także, jak obsłużyć błędy oraz kanały RSS czy też wygenerować pliki PDF. Ponadto nauczysz się konfigurować serwery Apache 2 oraz Nginx. Ćwiczenia zawarte w tej książce pozwolą Ci szybko i przyjemnie wdrożyć Django w Twoim projekcie aplikacji WWW!
Sposób instalacji Django
Tworzenie nowego projektu
Konfiguracja projektu
Wykorzystanie panelu administracyjnego
Mapowanie widoków
Obsługa formularzy
Reagowanie na błędy
Udostępnienie kanału RSS
Generowanie plików PDF
Zasady konfiguracji serwera Apache 2 z mod_python
Konfiguracja serwera Nginx
Przegląd firm oferujących hosting z obsługą Pythona
Django i Google App Engine
Stwórz wydajną i przyjemną w zarządzaniu witrynę WWW!
Darmowy fragment publikacji:
Django. Æwiczenia
praktyczne
Autor: Piotr Maliñski
ISBN: 978-83-246-1888-0
Format: A5, stron: 88
Wykorzystaj mo¿liwoœci Django w swoim projekcie!
• Jak zainstalowaæ Django?
• Jak skonfigurowaæ framework i dopasowaæ go do swoich potrzeb?
• Jak uruchomiæ Django na Google App Engine?
Django nie jest kolejnym frameworkiem napisanym w jêzyku PHP. To elitarne rozwi¹zanie,
wykorzystuj¹ce jêzyk Python, oparte na wzorcu projektowym MVC. Pierwotnie Django
zosta³o opracowane z myœl¹ o stronach „prasowych”, z du¿¹ iloœci¹ newsów. Pierwsza
publiczna wersja ujrza³a œwiat³o dzienne w 2005 roku. Od tego czasu Django odnotowuje
ci¹g³y wzrost popularnoœci, a wachlarz jego zastosowañ znacznie siê rozrós³!
Dziêki tej ksi¹¿ce równie¿ Ty bêdziesz móg³ wykorzystaæ ten framework w swoim
projekcie! Sprawdzona formu³a ksi¹¿ki, k³ad¹ca nacisk na æwiczenia, pozwoli Ci
b³yskawicznie opanowaæ sposób instalacji oraz stworzyæ i skonfigurowaæ Twój w³asny
projekt. Dowiesz siê tak¿e, jak obs³u¿yæ b³êdy oraz kana³y RSS czy te¿ wygenerowaæ
pliki PDF. Ponadto nauczysz siê konfigurowaæ serwery Apache 2 oraz Nginx. Æwiczenia
zawarte w tej ksi¹¿ce pozwol¹ Ci szybko i przyjemnie wdro¿yæ Django w Twoim
projekcie aplikacji WWW!
• Sposób instalacji Django
• Tworzenie nowego projektu
• Konfiguracja projektu
• Wykorzystanie panelu administracyjnego
• Mapowanie widoków
• Obs³uga formularzy
• Reagowanie na b³êdy
• Udostêpnienie kana³u RSS
• Generowanie plików PDF
• Zasady konfiguracji serwera Apache 2 z mod_python
• Konfiguracja serwera Nginx
• Przegl¹d firm oferuj¹cych hosting z obs³ug¹ Pythona
• Django i Google App Engine
Stwórz wydajn¹ i przyjemn¹ w zarz¹dzaniu witrynê WWW!
Spis treĂci
Rozdziaï 1. Wprowadzenie do Django
Django i Python
Dlaczego Django?
Django w sieci
Wymagana wiedza
ZawartoĂÊ ksiÈĝki
Instalacja Django
Rozdziaï 2.
Rozdziaï 3. Pierwsze kroki
Rozdziaï 4.
Tworzenie aplikacji
Rozdziaï 5. KsiÚga kucharska
Rozdziaï 6. Hosting aplikacji Django
Konfiguracja serwera HTTP
Hosting projektów Django
Wykorzystywanie aplikacji i kodu z projektów Django
Rozdziaï 7. Django i Google App Engine
Rozdziaï 8. PrzeglÈd projektów i serwisów
Rozdziaï 9. Serwisy poĂwiÚcone Django
Rozdziaï 10. Inne frameworki WWW napisane w Pythonie
5
5
6
6
7
7
9
13
17
47
55
55
57
59
61
75
79
83
5
KsiÚga kucharska
W rozdziale tym przedstawione zostanÈ róĝne rozwiÈzania,
fragmenty kodu i ciekawe aplikacje Django.
m W I C Z E N I E
5.1
Obsïuga bïÚdów
Ustawienie w settings.py zmiennej DEBUG na False spowoduje, ĝe zamiast
treĂci wyjÈtków wyĂwietlany bÚdzie szablon 500.html, a w przypadku
braku podstrony — 404.html. Zazwyczaj jednak zachodzi potrzeba
obsïugi czÚĂci bïÚdów na poziomie widoków, np. gdy brakuje kate-
gorii o podanym odnoĂniku i chcemy wyĂwietliÊ stosowny komunikat.
W przypadku Django, czy teĝ w ogóle Pythona, jest to doĂÊ ïatwe do
zaimplementowania przy uĝyciu wyjÈtków. BÚdÈ one generowane przy
pobieraniu rekordu za pomocÈ metody GET, jeĝeli dany obiekt nie bÚdzie
istniaï.
1. Otwórz plik news/views.py i w widoku show_news zmieñ wiersz
pobierania wiadomoĂci na:
try:
news = News.objects.get(slug=slug)
except:
return render_to_response( error.html ,
{ error : Strona nie istnieje },
context_instance=RequestContext(request))
48
2. Stwórz szablon error.html o kodzie:
Django • mwiczenia praktyczne
{ extends base.html }
{ block main }
{{ error }}
{ endblock }
3. Otwórz stronÚ z dowolnÈ wiadomoĂciÈ, a nastÚpnie zmieñ jej
slug na bïÚdny.
W przypadku gdy wiadomoĂÊ o podanym odnoĂniku (slug) nie bÚdzie
istniaïa, wygenerowany zostanie wyjÈtek. Przechwytujemy go za pomocÈ
try/catch i wyĂwietlamy odpowiedni komunikat.
m W I C Z E N I E
5.2
Kanaïy RSS
W tym Êwiczeniu dodamy kanaï RSS dla najnowszych wiadomoĂci
z wykorzystaniem komponentu Feed frameworka Django.
1. W katalogu news stwórz plik feeds.py o kodzie:
# -*- coding: utf-8 -*-
from blogs.news.models import *
from django.contrib.syndication.feeds import Feed
class LatestNews(Feed):
title = Wiadomoħci z MOJASTRONA.pl
link = MOJASTRONA.pl
description = Wiadomoħci z MOJASTRONA.pl
def items(self):
return News.objects.order_by( -id )[:15]
2. W urls.py dodaj fragment kodu:
from blogs.news.feeds import *
feeds = {
news : LatestNews,
}
3. Dodaj reguïÚ mapowania:
(r ^rss/(?P url .*)/$ , django.contrib.syndication.views.feed ,
´{ feed_dict : feeds}),
4. W katalogu templates utwórz folder feeds, a w nim pliki
news_title.html i news_desription, odpowiednio o kodzie:
{{ obj.title }}
i
{{ obj.text|safe }}
Rozdziaï 5. • KsiÚga kucharska
49
5. Pod adresem http://localhost:8000/rss/news/ dostÚpny bÚdzie
gotowy kanaï RSS.
Tworzenie kanaïów RSS czy teĝ Atom za pomocÈ Feed polega na zde-
finiowaniu klasy zawierajÈcej opis kanaïu (title, link, description),
a takĝe podklasy items okreĂlajÈcej listÚ rekordów do wyĂwietlenia.
Dodatkowo moĝemy dodaÊ proste szablony, okreĂlajÈce, jakie pole
lub pola modelu naleĝy wyĂwietlaÊ dla pól title i description w ka-
nale RSS.
m W I C Z E N I E
5.3
Mapa sitemap
Sitemap to plik XML zawierajÈcy listÚ stron serwisu. Sitemaps zostaïy
wymyĂlone przez Google i obecnie kilka wyszukiwarek uĝywa ich
w celu usprawnienia indeksowania stron internetowych. Celem tego
Êwiczenia bÚdzie stworzenie mapy z wykorzystaniem elementów fra-
meworka.
1. W settings.py do INSTALLED_APPS dodaj django.contrib.sitemaps .
2. Otwórz plik news/feeds.py i dodaj fragment kodu:
from django.contrib.sitemaps import Sitemap
class NewsMap(Sitemap):
def items( self ):
return News.objects.all()
def lastmod( self, obj ):
return obj.date
def changefreq(self, obj):
return monthly
3. Otwórz plik urls.py i dopisz do niego kod:
sitemaps = {
news : NewsMap,
}
4. Dodaj do reguï mapowania wpis:
(r ^sitemap.xml$ , django.contrib.sitemaps.views.sitemap ,
´{ sitemaps : sitemaps})
5. Pod adresem http://localhost:8000/sitemap.xml znajdziesz mapÚ
sitemap dla naszej strony.
50
m W I C Z E N I E
5.4
Django • mwiczenia praktyczne
Generowanie plików PDF
W Pythonie do generowania plików PDF moĝemy wykorzystaÊ biblio-
tekÚ ReportLab (http://www.reportlab.org/rl_toolkit.html). Pakiet dla sys-
temów MS Windows moĝemy pobraÊ ze strony projektu, natomiast
uĝytkownicy Linuksa zapewne znajdÈ ReportLab w repozytorium dys-
trybucji. Tworzenie plików PDF polega tu na rysowaniu elementów
na stronie z wykorzystaniem wspóïrzÚdnych. ReportLab to narzÚdzie
bardziej techniczne, sïuĝÈce, jak sama nazwa wskazuje, do genero-
wania raportów, zestawieñ czy dokumentów o okreĂlonej strukturze.
Jeĝeli interesuje nas konwersja kodu HTML na plik PDF w wiÚkszym
zakresie, to pomóc nam moĝe biblioteka Pisa. W tym Êwiczeniu przed-
stawiony zostanie prosty widok generujÈcy plik PDF dla wiadomoĂci.
1. Otwórz plik news/views.py i dodaj na poczÈtku importy:
from reportlab.platypus import Table, TableStyle, Paragraph
from reportlab.lib import colors
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.styles import getSampleStyleSheet
from django.http import HttpResponse, HttpResponseRedirect
from django.conf import settings
2. Dodaj widok generujÈcy plik PDF o kodzie:
def show_news_pdf(request, slug):
try:
news = News.objects.get(slug=slug)
except:
return render_to_response( error.html ,
{ error : Strona nie istnieje },
context_instance=RequestContext(request))
e = HttpResponse()
e[ Content-Type ] = application/pdf
e[ Content-Disposition ] = attachment; filename= s.pdf ;
´ news.slug
c = canvas.Canvas(e, pagesize=A4)
width, height = A4
pdfmetrics.registerFont(TTFont( Dejavu , settings.APP_ROOT +
´ site_media/fonts/DejaVuSans.ttf ))
c.setFont( Dejavu , 14)
# margines, wysokoħè, treħè
Rozdziaï 5. • KsiÚga kucharska
51
c.drawString(50,(height-60), news.title)
stylesheet=getSampleStyleSheet()
styleN = stylesheet[ Normal ]
styleN.fontName = Dejavu
styleN.fontSize = 9
p = Paragraph(news.text, styleN)
w,h = p.wrap(width-70, height)
p.drawOn(c, 50, (height-120))
c.line(50, (70), 570, (70))
c.setFont( Dejavu , 8)
c.drawString(50,(60), unicode(news.date))
c.drawString(50,(50), u Wiadomoħè ze strony
´http://www.MOJASTRONA.pl )
c.showPage()
c.save()
return e
3. Dodaj w pliku urls.py reguïÚ mapujÈcÈ odnoĂnik na nastÚpujÈcy
widok:
(r ^news/(?P slug [w-_]+)/pdf/$ , news.views.show_news_pdf ),
4. W szablonie show_news.html dodaj odnoĂnik do wersji PDF:
a href= /news/{{ news.slug }}/pdf/ PDF /a
5. W pliku settings.py zdefiniuj APP_ROOT, podajÈc bezwzglÚdnÈ
ĂcieĝkÚ do katalogu z projektem:
APP_ROOT = ħcieľka/do/katalogu/z/projektem
6. W katalogu site_media dodaj folder fonts i umieĂÊ w nim
przynajmniej jeden plik czcionki TTF (w tym przykïadzie
skorzystano z czcionki Dejavu — dejavusans.ttf).
7. Zapisz wszystkie zmiany i sprawdě wersjÚ PDF dla wybranej
wiadomoĂci.
JeĂli chodzi o kod, zaczynamy w nim od okreĂlenia pïótna (canvas),
czyli rozmiaru strony i nazwy pliku. NastÚpnie rejestrujemy czcionki,
jakich chcemy uĝyÊ (podane pliki *.ttf muszÈ byÊ dostÚpne). W Report-
Lab elementy umieszczane (rysowane) sÈ w miejscu (x, y) okreĂlonym
w pikselach lub w innych jednostkach (cale, centymetry itd.). Dla strony
A4 zmienne width i height przechowujÈ dane punktu znajdujÈcego
siÚ w lewym dolnym rogu (rozmiar strony A4). Do wyĂwietlania tekstu
stosujemy nieformatowany (drawString) oraz formatowany (Paragraph)
52
Django • mwiczenia praktyczne
Rysunek 5.1. Plik PDF wygenerowany dla wiadomoĂci
tekst. Wszystkie te elementy posiadajÈ szereg opcji odpowiedzialnych
za ich wyglÈd, a szczegóïy znajdziemy w bardzo obszernej dokumen-
tacji ReportLab.
m W I C Z E N I E
5.5
AJAX w Django
Wykorzystanie ĝÈdañ wysyïanych AJAX-em wyglÈda w Django stan-
dardowo. Przesyïamy je na okreĂlony URL, a nastÚpnie do ich wykony-
wania uĝywamy dowolnego frameworka JavaScript, np. jQuery, czy teĝ
jakichĂ prostszych skryptów. W tym Êwiczeniu skorzystamy z prostej
biblioteki ajaxroutine (http://www.dynamicdrive.com/dynamicindex17/
ajaxroutine.htm).
1. Otwórz plik news/views.py i dodaj widok:
def ajax(request):
return HttpResponse(unicode(datetime.now()))
2. Dodaj mapowanie w urls.py:
(r ^ajax/$ , news.views.ajax ),
3. W szablonie base.html w sekcji HEAD wpisz kod:
script type= text/javascript
´src= /site_media/ajaxroutine.js /script
script type= text/javascript
function processGetPost()
{
var myajax=ajaxpack.ajaxobj
var myfiletype=ajaxpack.filetype
Rozdziaï 5. • KsiÚga kucharska
53
if (myajax.readyState == 4)
{
if (myajax.status==200 ||
´window.location.href.indexOf( http )==-1)
{
// JeĪeli coĞ zostanie zwrócone, wyĞwietl to
if (myajax.responseText.length 3)
{
document.getElementById( aj )
´.innerHTML= h1 +
´myajax.responseText + /h1 ;
}
else
{
// CzyĞcimy komunikat
document.getElementById( aj )
´.innerHTML= ;
}
}
}
}
/script
4. W kodzie szablonu dopisz:
div id= aj style= text-align:center; /div
a href= # onclick= ajaxpack.getAjaxRequest( /ajax/ , ,
´processGetPost, txt ) Czas przez AJAX /a
Po zapisaniu zmian pojawi siÚ odnoĂnik Czas przez AJAX, który bÚdzie
wysyïaï ĝÈdania AJAX-a za pomocÈ biblioteki ajaxroutine. Dodana
funkcja processGetPost bÚdzie wstawiaïa otrzymane dane (to co zwróci
wywoïany widok) do taga DIV o ID aj:
document.getElementById( aj ).innerHTML
Rysunek 5.2. ¿Èdania wysyïane za pomocÈ AJAX-a
Pobierz darmowy fragment (pdf)