Constantemente en este foro y otros se ven preguntas relacionadas con apps/sitios web (ya sea php, delphi, .net) que evidencian en el fondo un problema: Realmente no se entiende que es http, html y similares.
La cosa es que frameworks como asp.net, intraweb, django estan muy arriba en la abstraccion, y cosas como php y, cgi y similares muy abajo.
Una *excelente* forma de entender todo este asunto, es usar un *micro* framework.
Uno en python que es supersimple, superfacil de instalar (es solo 1 archivo), se aprende -literalmente- en 1 dia y que provee un buen fundamento para entender todo el asunto es:
http://bottlepy.org/
Esto es un ejemplo, de un servidor web + pagina, corriendo en localhost:8080
Código PHP:
from bottle import route, run
@route('/hello/:name')
def index(name='World'):
return '<b>Hello %s!</b>' % name
run(host='localhost', port=8080)
Esto es mas completo, mostrar un pagina de login:
Código PHP:
from bottle import get, post, request
@get('/login') # or @route('/login')
def login_form():
return '''<form method="POST">
<input name="name" type="text" />
<input name="password" type="password" />
</form>'''
@post('/login') # or @route('/login', method='POST')
def login_submit():
name = request.forms.get('name')
password = request.forms.get('password')
if check_login(name, password):
return "<p>Your login was correct</p>"
else:
return "<p>Login failed</p>"
Lo bueno de este ejemplo es que los decoradores @get / @post hacen EXPLICITO que estamos trabajando con los verbos HTTP GET/POST
El tutorial:
http://bottlepy.org/docs/dev/tutorial.html
Muestra los aspectos elementales de combinar HTTP/HTML:
- Uso de los headers
- Descarga de archivos
- Uso de cookies de forma manual
- Cambiar el formato de respuesta (ej: de html a xml)
- Uso de plantillas (para algo mucho mejor y mas potente:
http://jinja.pocoo.org)
Y muestra como hacer una pagina de tareas:
http://bottlepy.org/docs/dev/tutorial_app.html
y como hacer una pagina en tiempo real (ie: chat):
http://bottlepy.org/docs/dev/async.html
Mientras un framework como
https://www.djangoproject.com/ es algo mucho mas completo, he aprendido que no entender el desarrollo web a un nivel mas elemental se convierte en un problema.
Espero les guste.
P.D: Otras opciones:
http://flask.pocoo.org/
http://webpy.org/