RkBlog

Hardware, programming and astronomy tutorials and reviews.

web.py

Web.py to prosty framework do tworzenia niezbyt skomplikowanych aplikacji internetowych. Nie jest zbyt rozbudowany, lecz świetnie nadaje się na proste strony, jak i RESTowe API oparte o żądania HTTP

web.py to bardzo prosty "skrypt" do tworzenia stron www w Pythonie. Instalacja jest prosta, wystarczy wykonać polecenie:
easy_install web.py
Ręczna instalacja wygląda następująco:

Prosta Aplikacja

import web

urls = (
      '/(.*)', 'hello'
)

class hello:        
      def GET(self, name):
          print 'Test'

if __name__ == "__main__": web.run(urls, globals())
Teraz wystarczy python nazwa_pliku.py i pod http://localhost:8080/ zobaczymy naszą stronę
Zmienna url przechowuje listę urli wywołujących określoną klasę. Pierwszy element to wyrażenie regularne określające URL a drugi to nazwa klasy, która zostanie wywołana.

Przekazywanie argumentów

Web.py umożliwia przekazywanie do metod zmiennych ze zmapowanych odnośników dopasowanych do wyrażeń regularnych np:
'/news/data/(.*)/', 'archiwum',
Metody klasy archiwum dostaną drugi argument, który możemy dowolnie nazwa, a zawierać będzie wartość zmapowaną w wyrażeniu regularnym:
def GET(self, data)

Formularze

Dla danej klasy możemy zdefiniować metodę POST, która wywołana zostanie przez żądanie POST - np. wysłanie formularza. Dostęp do wysłanych danych zapewnia web.input():
class klasa:
	def GET(self):
		print '
To jest GET 
'
	def POST(self):
		print '
To jest POST
'
		form = web.input()
		print form.nazwa_pola

web.py i FastCGI

Produkcyjnie nie należy stosować bezpośrednio serwera web.py, lecz skorzystać ze standardowego serwera HTTP, np. lighttpd, dla którego konfiguracja wygląda następująco:
 fastcgi.server = ( "/web/" =>     
 (( "socket" => "/tmp/fastcgi.socket",
    "bin-path" => "/ścieżka/do/pliku.py",
    "check-local" => "disable"
 ))
 )
Gdzie /ścieżka/do/pliku.py to ścieżka do pliku zawierającego kod naszej strony napisanej w web.py o kodzie:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import web

############################ kod widoków
urls=(

)

class klasa:
	def GET(self):
		print '
To jest GET 
'
	def POST(self):
		print '
To jest POST
'
#############################

if __name__ == "__main__":
	web.webapi.internalerror = web.debugerror
	web.wsgi.runwsgi = lambda func, addr=None: web.runfcgi(func, addr)
	web.run(urls, globals(),web.reloader)
RkBlog

22 July 2008;

Comment article