Archivo para python

resumiendo el libro de Django

Posted in Linux, python, software libre, Uncategorized with tags , , on 28 febrero 2009 by riverplatense

En mi camino de aprender Django, me encontré con el Djangobook, y a partir de allí El libro de Django, traducción del original hecha entre otros por el amigo Humitos. Ahora les paso un resumen de ese libro, en esta primera entrega llegamos a hacer nuestra primer página dinámica con este framework.

Resumen del Djangobook

Para crear el proyecto mysite en el directorio actual

$ django-admin.py startproject mysite

Crea los siguientes archivos:

__init__.py
: Un archivo requerido para que Python trate a este directorio como un paquete
manage.py: Una utilidad de línea de comandos para interactuar con la aplicación
settings.py: Opciones y configuraciones del proyecto
urls.py: Tabla de contenidos del proyecto

Django trae un pequeño servidor para probar el proyecto. NO usarlo en reemplazo de Apache u otro de producción, es sólo para probar mientras uno desarrolla.

$ python manage.py runserver

Aparece algo parecido a:

Validating models…
0 errors found.
Django version 1.0, using settings ‘mysite.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Eso quiere decir que el servidor está corriendo y si voy al navegador y entro en http://localhost:8000 voy a ver la página de prueba.

Ahora que sabemos que funciona, vamos a hacer nuestra primera página dinámica, para empezar haremos una que indique la hora actual. Se debe hacer una *función de vista* (view function) que es una función que toma como argumento una petición web y retorna una respuesta web. Es decir una página, un error 404, un documento, etc. Entonces creamos un archivo llamado vistas.py en el directorio mysite y escribimos:

from django.http import HttpResponse
import datetime

def dia_hora_actual(request):
ahora = datetime.datetime.now()
html = "Ahora es %s." % ahora

return HttpResponse(html)

Repasemos línea por línea:

* Primero importamos la clase HttpResponse
* Luego importamos el módulo datetime desde la biblioteca standard de Python
* Definimos la funcion dia_hora_actual() que es una funcióń de vista. Toda función de vista toma como primer argumento un objeto HttpRequest al que se le asigna el nombre “request”
* Calculamos el valor de ahora mediante la biblioteca estandard de Python
* Generamos el html con la respuesta
* Generamos el objeto HttpResponse con la respuesta. Casi siempre una función de vista es responsable de crear un objeto HttpResponse

Ahora bien, cómo le “decimos” a Django que use ese archivo? Allí empiezan a tallar las *URLconfs*. Son tablas de contenido que le indican a Django “para tal URL usá este archivo, para esta otra URL usá este otro código, etc”

Veamos el archivo urls.py que se generó al crear tu proyecto:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),

# Uncomment the next line to enable the admin:
# (r'^admin/(.*)', admin.site.root),
)

Repasemos este archivo línea por línea:

Primero importamos todos los objetos desde el módulo django.conf.urls.defaults, en ese paquete obtendremos una función llamada “patterns”

Luego llamamos a esa función patterns() y guardamos el resultado en la variable urlpatterns. El argumento de la función es una cadena vacía. Todas las demás líneas están comentadas.

En este momento nuestra aplicación está en blanco, nueva, entonces Django sabe que debe mostrar la página “It worked!”. Vamos a cambiar este archivo para que podamos mostrar la hora y fecha actuales:

from django.conf.urls.defaults import *
from mysite.vistas import dia_hora_actual

urlpatterns = patterns('',
(r'^time/$', dia_hora_actual),
)

Lo que hacemos es importar la función dia_hora_actual desde vistas.py y por otro lado agregamos la línea (r’^time/$’, dia_hora_actual), que es una tupla compuesta por una expresión regular y la denominacipon de la función. En español, le decimos a Django que toda petición web URL /time sea manejada por la función dia_hora_actual

La expresión regular implica que la URL debe ser exclusivamente “time”. El ^ al principio y el $ al final indican “eso y nada más que eso”.

Ya podemos ir al navegador y ponemos localhost:8000/time y deberemos ver la página que generamos.

Anuncios

Terminamos el curso de Python – Ejercicios y evaluación

Posted in actualidad, educación, Linux, python, Sanca, software libre with tags , , , , on 21 diciembre 2008 by riverplatense
wxPython, la biblioteca gráfica usada en el curso

wxPython, la biblioteca gráfica usada en el curso

Según comentaba acá , este año tuvimos la inmensa dicha de compartir el primer curso de Programación usando el lenguaje Python, en la Escuela de Oficios San Cayetano, perteneciente al CFP 401 de Vicente López, Provincia de Buenos Aires.

En esa primera entrega listaba los primeros ejercicios, completo en este post los trabajos que hicimos en este año:

Empieza con ejercicios en Python pelado, o sea aplicaciones de consola.

#38    Usando una variable booleana, pedir números por teclado hasta que se ingrese un cero, al pasar estos devolver el resultado de la multiplicación de todos los números ingresados.

#39   Primer Proyecto: Hacer un juego   donde la PC seleccione un número al azar entre 0 y 100. El jugador debe  ir tratando de  adivinar y el programa devolverá “Muy bajo”, “Muy alto” según corresponda. Una vez que adivina, mostrar un mensaje de felicitación  junto a la cantidad de intentos.

#40   “El semáforo loco”: En una esquina un semáforo toma valores aleatorios de rojo, amarillo y verde y no lo podemos controlar.
Programar el semáforo de la calle transversarl para evitar accidentes.

#41  Programar un juego de “piedra”, “papel” y “tijera”. Las  reglas son las siguientes: 1º)  La aplicación le  pregunta el nombre al jugador.  2º)  Luego pregunta cuantas manos van a jugar.  3º)  El programa hace su primer jugada, le pregunta al jugador la suya y calcula el ganador.  4º) Una vez que llega a las manos acordadas en el punto 2 finaliza la partida y muestra el resultado final.

#42  Hacer un pequeño juego donde la PC nos desafía al “Cara o Seca” en 3 manos.

#43  El programa simulará el juego de adivinar en qué mano está la moneda. Le preguntará a la persona el nombre y cuantas partidas quiere jugar, luego calculará el ganador.

#44  Pedir el nombre de la persona y un rubro (impuestos, servicios, etc.) e ir solicitando e ingresando los gastos correspondientes hasta que la persona ingrese 99999. Allí devolver la suma de lo ingresado. Si la persona ingresa un número > 10000 ignorarlo.

#45  Pedir el ingreso de diez nombres de personas, contar cuantos “Perez” aparecen.

#46  Dada una palabra devolver en orden inverso.  Es decir si se ingresa “Calcular” devolver “Raluclac”

#47  Dada una palabra o una frase, decir si es o no un palíndromo (capicúa)

#48  Reformar el ejercicio 47 para que descarte los espacios y funcione con frases.

#49  Escriba un programa que permita crear una lista de palabras. El programa pide un número y luego solicita ese número de palabras para crear la lista. Por último el programa tiene que escribir la lista completa.

#50  Sea una lista de personas autorizadas en una empresa a manejar una aplicación. Hacer un programa que pida el nombre,  busque en la lista si ese nombre está autorizado o no. Si no lo está escharlo y terminar el programa; si lo está pedirle la edad y  responderle aproximadamente  en que año nació. Despedirlo y terminar el programa.

#51  Pedir un número por teclado y calcular la serie de Fibonacci que no sobrepase ese valor.  Los núm de la serie deberán almacenarce en una lista y ser mostrados al final del ejercicio.

#52  Hacer un programa que nos dé la bienvenida. Que tenga un menú con dos opciones: 1) Usar el  programa, 2) Ayuda. Si se elije el menú “Ayuda” mostrar un pequeño texto explicativo y terminar. Si se elije la opción “Usar el  programa”  pedirá un número y devolverá los multiplos de ese número.

#53  Sea  la siguiente lista: Lista= [“River”, “Boca”,  “CASLA”, “Velez”, “Newell’s”, “Racing”], hacer un  programa que  presente  un  menú  como el  siguiente:
1) Agregar
2)  Quitar determinado ítem
3)  Listar
4)  Ordenar
5) Acerca de…
6) Salir

#54  Hacer un programa que me pida mi nombre y lo guarde en un archivo llamado “datos.txt”.

#55  Hacer un programa que almacene nombres de estudiantes. Los debe guardar en un archivo llamado “estudiantes.txt”. Además debe poder mostrar todos los estudiantes que se ingresaron hasta el momento. Hacer un pequeño menú.

#56  Modificar el programa anterior para que podamos dar de baja en el archivo.

#57  Hacer un programa  que pida por teclado  3  números. Decir si  se  puede formar un triángulo  con esas tres medidas de lados. Si se puede aclarar qué tipo de triángulo es. (para que se pueda formar un triángulo, la suma de dos lados tiene que ser mayor al tercero).

#58  Pedir 3 lados y primero: decir si con esos lados se puede hacer un triángulo. Resolverlo usando funciones.

#59  Pedir 2 palabras y decir si riman o no. (Llamamos “rimar” a que las últimas 3 letras sean iguales)

#60  Pedir un número inferior a 4mil y que el programa lo escriba en números romanos.

#61   Usando  diccionarios, elabore una agenda de  teléfono de los compañeros del  curso, donde  pida el  nombre y  devuelva  el teléfono.

#62  Practicamos Clases con el siguiente modelo de aplicación:

class Persona:  ———->  definición  de clase
def saludar(self):  ————–> método

print “Hola!”
def despedir(self):   —————> método
print “Chau!”

cacho =  Persona()   ——> Instancia
cacho.saludar()
cacho.despedir()
olga =  Persona()   ——–> Instancia
olga.despedir()
nadia =  Persona()  ——-> Instancia

#63   Crear una  clas persona.

#64   Crear 2  clases:

-Profe ( def  __init__ : nombre,  curso, sueldo.  def  saludar)
-Estudiante ( def  __init__ : nombre,  curso, edad.   def  inscribir  )

#65   Hacer un programa usando clases, que por un lado  pida : nombre, apellido,  dni y tel.  de un socio.
Además permita ingresar  título y código de una película / libro  alquilada. Todo funcionará a través de una base de datos MySQL.

A partir de acá comenzamos con una biblioteca gráfica llamada wxPython , es decir que las aplicaciones dejan de ser en consola para tener una GUI.
#66 “Hola  mundo!” en ventana.

#67  Diseñar una ventana con dos botones abajo a la derecha que digan  “aceptar”  y  “cancelar”.

#68   Realizar la siguiente interfase:

Ingreso de datos:
Nombre:             _______________   (wx.TextCtrl)

D.N.I. :                 _______________   (wx.TextCtrl)

Nacionalidad:   _______________   (wx.ComboBox)

Estado Civil:      ·  soltero                 (wx.RadioBox)
· casado

Botones:                                           Cancelar                   Aceptar

#69   Hacer una ventana de 400 * 300 que aparezca centrada en la pantalla y  dos botones: El botón “Cerrar” para que termine la aplicación y el  botón  “Saludar” para que aparezca  un saludo en el panel.

#70  Hacer una ventana de 350 * 250 la cual tenga en el panel el título “Probamos botones”  y tres botones:
1)  “Cerrar” —–>  Salir de la aplicación
2)  “Uno”  ——->  Que aparezca otra  ventana con un mensaje, el  ícono de “atención” y un  botón (Aceptar)
3)  “Dos”  ——->  Que aparezca otra  ventana con un mensaje, un ícono  y dos botones (SI/NO)

#71  Realizar una ventana en la que podamos ingresar un nombre y un teléfono y que cuando hagan  click en el botón  “saludar” nos aparezca otra ventanita que nos saluda y nos dice el núm de tel. Si se oprime el botón “Cancelar”  cierre la ventana.

#72  Realizar un a ventana en la que podamos ingresar: nombre (wx.TextCtrl), estado civil (wx.ComboBox), fecha de nacimiento (wx.DatePickerCtrl), y  tenga el botón “Cancelar” y “Saludar”.  Estos datos tienen que aparecer en un mensaje de diálogo.

#73  Crear un formulario para dar de alta un nuevo libro / película. Los  datos deben  cargarse  a una  base de datos MySQL a través de mysqldb.

#74  Crear una tabla  “club” con los siguientes campos: id-club,  nombre, anio-fundacion, cant-campeonatos. Luego ralizar un formulario para rellenar con el nombre de un club, su año de fundación y cantidad de campeonatos.  Estos datos deben ingresar a la base  de  datos.

#75 Crear una nueva ventana  con wx.MenuBar  y  wx.StatusBar, que contenga la anterior ventana  y una nueva de alta de jugadores según el club  ingresado.  Además mostrar  un listado de los clubes y otro de los jugadores ingresados hasta el momento.

#76  Realizar un editor de texto.

# 77 Desarrollar con todo lo aprendido un sistema de administración con ABM a manera de trabajo final en modo proyecto. (En respuesta a esta consigna, los estudiantes han desarrollado sistemas de turnos para consultorios médicos, sistema de administración de servicios de una peluquería, de una biblioteca, pizzería, etc.)

Hasta allí llegamos, esperamos que sea útil para muchos esta lista de ejercicios, que la usen en cursos similares o en autoaprendizaje, están pensados para ir de lo más fácil a lo más complejo, lógicamente.

Realmente, el resultado ha sido completamente satisfactorio, más de lo que esperábamos, nos sentimos satisfechos ya que han terminado catorce compañeros que se llevan los rudimentos necesarios para hacer su camino en este mundo de la programación y que, seguramente, serán muy buenos profesionales si se lo proponen.