devboard: Wprowadzenie do web2py, prosty system newsów. - devboard

Skocz do zawartości

Strona 1 z 1
  • Nie możesz napisać tematu
  • Nie możesz odpowiedzieć

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

#1 Użytkownik nie jest zalogowany   pagenoare

  • CakeCoder
  • PipPip
  • Grupa Administratorzy
  • Postów 19
  • Rejestracja 02-grudzień 08
  • Płeć:Male
  • Skąd:Toruń

Napisano 08 sierpień 2009 - 12:57

Spis treści

  • Co to jest web2py?
  • "Instalacja".
  • Panel.
  • Tworzymy pierwszy model.
  • Tworzymy kontroler.
  • Tworzymy widok.
  • Co dalej?
  • Linki


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ść.

Dołączona grafika

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.

Dołączona grafika

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.

Dołączona grafika

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.

Dołączona grafika

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

Dołączona grafika

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

Dołączona grafika

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?

Dołączona grafika

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 }}


Dołączona grafika

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


0

#2 Użytkownik nie jest zalogowany   pbnan

  • Młodszy Programista
  • PipPip
  • Grupa Użytkownicy
  • Postów 12
  • Rejestracja 13-marzec 09
  • Płeć:Male
  • Skąd:Poland/Oświęcim

Napisano 08 sierpień 2009 - 16:27

Page na Windows ─ czy mnie oczy kłamią, czy to dzisiejsze słońce?

Zastanawia mnie jedna rzecz: jeżeli wszędzie podają:
db = SQLDB(link)

To dlaczego Ty robisz:
db = DAL(link)

który to (DAL) nie jest nawet udokumentowany.

Ponadto: jakie będą kolejne części?
0

#3 Użytkownik nie jest zalogowany   pagenoare

  • CakeCoder
  • PipPip
  • Grupa Administratorzy
  • Postów 19
  • Rejestracja 02-grudzień 08
  • Płeć:Male
  • Skąd:Toruń

Napisano 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 ;)
0

#4 Użytkownik nie jest zalogowany   pbnan

  • Młodszy Programista
  • PipPip
  • Grupa Użytkownicy
  • Postów 12
  • Rejestracja 13-marzec 09
  • Płeć:Male
  • Skąd:Poland/Oświęcim

Napisano 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.
0

#5 Użytkownik nie jest zalogowany   pagenoare

  • CakeCoder
  • PipPip
  • Grupa Administratorzy
  • Postów 19
  • Rejestracja 02-grudzień 08
  • Płeć:Male
  • Skąd:Toruń

Napisano 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...
0

Strona 1 z 1
  • Nie możesz napisać tematu
  • Nie możesz odpowiedzieć

Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych