web.py

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

Programowanie Sieciowe, 22 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact