Wprowadzenie do web2py, prosty system newsów. Tutorial ukazujący magię frameworka do tworzenia stron - web2py.

Kategoria: Javascript, HTML i CSS



pagenoare
08 sierpień 2009 - 12:57
Spis treści

    lCo to jest web2py?
    l
    l"Instalacja".
    l
    lPanel.
    l
    lTworzymy pierwszy model.
    l
    lTworzymy kontroler.
    l
    lTworzymy widok.
    l
    lCo dalej?
    l
    lLinkil


1. Co to jest web2py?

Web2py to kolejny framework do tworzenia stron www, napisany w Pythonie. Kolejny, ale zupełnie różniący się od
innych. Wykorzystuje wzorzec MVC (ang. Model-View-Controller)
oraz posiada wbudowany edytor aplikacji przez przeglądarkę. Nie wymaga instalacji oraz konfiguracji - ściągamy paczkę
i odpalamy, to wszystko! Czym się różni od innych frameworków? Przede wszystkich prostotą i łatwością w nauce. Został
stworzony w celach edukacyjnych przez Massimo Di Pierro. Więcej można
przeczytać na wikipedii.

2. "Instalacja".

Aby zacząć zabawe z web2py, należy ściągnąć odpowiednią paczke na dany system. Pod windowsa mamy plik .exe, pod mac
os x mamy .app, a dodatkowo pod każdy system możemy ściągnąć kod źródłowy (aby go odpalić potrzebujemy pythona w
systemie).

Windows -
http://www.web2py.co.../web2py_win.zip
Mac OS X -
http://www.web2py.co.../web2py_osx.zip
Źródła -
http://www.web2py.co.../web2py_src.zip

3. Panel.

Po ściągnięciu należy tylko uruchomić plik web2py.exe/.app/.py. Gdy go uruchomimy, pokaże nam się krótka prezentacja
oraz panel zarządzania serwerem deweloperskim. Możemy go uruchomić oraz wyłączyć, dodatkowo pokazuje nam wykres
przedstawiający ilosc wejść.

http://pub.pagenoare.net/wgr/Xe1PO1_thumb.PNG

Po odpaleniu serwera i podania hasła do panelu administracyjnego, web2py powinno uruchomić domyślną przeglądarkę pod
adresem http://127.0.0.1:8000, gdzie zobaczymy stronę powitalną. Następnie klikamy "Kliknij aby przejść do panelu
administracyjnego" i podajemy hasło. Strona główna panelu pokazuje jak listę naszych aplikacji. Domyślnie mamy 3:
admin, examples oraz welcome.

http://pub.pagenoare.net/wgr/C_AaI8_thumb.PNG

Stwórzmy teraz naszą własną aplikację wprowadzając nazwe (np. tutorial) w prawej kolumnie oraz klikając przycisk
submit. Następnie powinniśmy zostać przekierowani do widoku naszej aplikacji, gdzie mamy listę: modeli, kontrolerów,
widoków, tłumaczeń, plików statycznych oraz modułów.

http://pub.pagenoare.net/wgr/5Lb4Lp_thumb.PNG

Przejdzmy zatem to edycji modelu - db.py.

4. Tworzymy pierwszy model.

Domyślnie ten plik jest wypełniony definicjami ORM'a oraz importami dodatkowych usług, nam to na razie jest nie
potrzebne, więc usuńmy wszystko, z wyjątkiem 1 lini, w której definiujemy kodowanie (# coding: utf8). Zdefiniujmy
obiekt bazy danych:

db = DAL('sqlite://storage.sqlite') # jako 1 argument podajemy tzw. URI danego silnika bazy danych, więcej przykładów: http://web2py.com/examples/default/dal

ORM web2py jest bardzo prosty i czytelny, napiszmy więc prosty model,
powiedzmy aktualności:

db.define_table('aktualnosci', db.Field('tytul', 'string', length=125), db.Field('data', 'datetime', default=request.now), db.Field('tresc', 'text'), )

Tym oto sposobem zdefinowaliśmy tabele w bazie, która ma pola: tytul (o maks. długości 125 znaków),
data (która jest polem datetime i domyślnie przyjmuje aktualną date i czas) oraz tresc. Zdefiniujmy
teraz walidatory, czyli co może, musi albo nie może być w w/w polach.

db.aktualnosci.tytul.requires = [ IS_NOT_IN_DB(db, 'aktualnosci.tytul'), IS_NOT_EMPTY() ] db.aktualnosci.data.requires = IS_NOT_EMPTY() db.aktualnosci.tresc.requires = IS_NOT_EMPTY()

Jak łatwo się domyślić wszystkie nasze pola są obowiązkowe (walidator IS_NOT_EMPTY()), a pole tytul ma
być unikalne. Dodajmy teraz jakiś przykładowy news, w tym celu musimy zapisać zmiany (przycik save, u góry po lewej
stronie edytora), następnie "edytuj" u góry w menu i "administracja bazy danych", pod "Modele". Weszliśmy do
zarządzania bazą danych, jeśli wszystko zrobiliśmy dobrze, pojawiła nam się nasza tabelka - db.aktualnosci.

http://pub.pagenoare.net/wgr/1yCQtb_thumb.PNG

Wejdźmy więc w nią i wstamy nowy rekord ("wstaw nowy rekord do tabeli aktualnosci").

http://pub.pagenoare.net/wgr/JfgZbJ_thumb.PNG

Tutaj można się pobawić, czy walidatory działają poprawnie (np. zostawić pole tytul puste, dodać raz news o tytule
"foo" i spróbować dodać taki sam drugi raz etc.).

http://pub.pagenoare.net/wgr/uMRJqv_thumb.PNG

Następnym krokiem będzie napisanie odpowiedniego kontrolera, który pokaże nam listę newsów.

5. Tworzymy kontroler.

Udajmy się teraz do strony zarządzania aplikacją i edytujmy kontroler default.py. Usuńmy wszystko z wyjątkiem
nagłówka, który odpowiada za kodowanie. Przykładowy kontroler, który wyświetla listę newsów z bazy:

def index(): news = db().select(db.aktualnosci.ALL) return dict(news=news)

Zapiszmy i wejdźmy w index, który znajduje się nad edytorem po lewej stronie. Powinna pojawić się tabelka z rekordami
z bazy danych, ale taka trochę... brzydka?

http://pub.pagenoare.net/wgr/-F1mIe_thumb.PNG

Napiszmy więc widok który pokaże te rekordy tak jak my chcemy!

6. Tworzymy widok.

Znów musimy przejść do głównego ekranu aplikacji i edytować widok default\index.html (domyślnie będzie ładowany przy
funkcji index z kontrolera default.py, analogicznie jeśli mamy kontroler foo.py i w nim funckje bar, to adres widoku
- foo/bar.html). Usuńmy z niego wszystko oprócz 1 linijki ({{extend 'layout.html'}}). Nasz widok może wyglądać np
tak:

{{extend 'layout.html'}} <h1>Newsy</h1> <br/> {{ for new in news: }} <div> <h2>{{= new.tytul }} <small>({{= new.data }})</small></h2> <p>{{= new.tresc }}</p> </div> <br/> {{ pass }}

http://pub.pagenoare.net/wgr/eelS6w_thumb.PNG

Wew. {{ }} można używać pythona, natomiast {{= cos }} wyświetla "cos". Ja użyłem prostej pętli for do wyświetlenia
wszystkich pobranych i przekazanych przez kontroler newsów, które znajdują się w news.

7. Co dalej?

W następnym tutorialu pokażę jak napisać prosty system użytkowników, dopisać komentarze do naszych aktualnosci, oraz
jak zbudować prosty Panel Administracyjny. Na dziś to by był koniec, mam nadzieję, że komuś się przyda i skorzysta z
tego artykułu.

Pozdrawiam - pagenoare.

8. Linki.
http://web2py.com
http://groups.google.com/group/web2py
#web2py @ FreeNode Załączone pliki
pagenoare
08 sierpień 2009 - 16:53
SQLDB - stary ORM
DAL - nowy ORM, nie dawno wprowadzony ;)

W kolejnych częściach postaram się odkryć więcej rzeczy jakie ma w sobie web2py, od HTML helperów po wbudowany system userów czy tworzenie API, korzystając z json. Albo np. pokazać jak wygląda obsługa AJAX :)

Co do Windows -- dysk mi padł i siedzę na nie swoim laptopie ;)
pbnan
08 sierpień 2009 - 17:07
Jak nowy ORM współpracuje z GAE? Gdzie można o nim poczytać, bo, przyznam szczerze, na stronie web2py nie znalazłem informacji?

BTW mała sugestia: coś w rodzaju tuta "jak zrobić własny [rodzaj skryptu, np. blog]" (kilkuczęściowego) z pewnością będzie dobra do pokazania.
pagenoare
08 sierpień 2009 - 18:32
yyy - sorki. Rzeczywiście od niedawna ORM został przepisany, ale funkcja DAL to tylko wrapper. Jeśli dasz jako argument 'gae', użyje GAE, jeśli normalne URI - zwróci obiekt SQLDB...


Podobne tematy:
=?iso-8859-2?q?Problem_z_nawigacj=B1_w_systemie_newsowym_w_AS P?=
System Partnerski w Bankier.pl - pytanie do praktyka
[Linux] Jaki do sieci, prosty i stabilny ?
[szukam] bardzo prostego systemu newsów
[PHP, MySql] system newsów (szukam)
[php]Prosty system newsów.