elige tu idioma english spanish

el taller

todo lo relacionado con el desarrollo

¿Por qué Python?

Creo que puedo hablar por todos los integrantes del equipo, hoy por hoy creemos que fue un gran acierto y que sin lugar a dudas nos ha hecho la vida mucho más fácil en multitud de aspectos.

Sin intentar convertir este articulo en lo que no es, y siendo casi cualquier leguaje de programación perfectamente válido para el desarrollo web profesional , llega el día en que hay que decidirse por uno e intentar aprender todo lo que puedas sobre él.

Las razones

A grandes rasgos fueron dos las razones que nos hicieron decantarnos por él.

Pocas cosas van a motivar más a un desarrollador que la propia retroalimentación de su ego. Me explico, por mucho que se intente, y en ocasiones se consiga, cada desarrollador tiene un fetiche del que en muy raras ocasiones se le puede sacar sin perder determinadas facetas o creatividad innata.

Happy coders

Aun sin conocerlo demasiado en el momento de la decisión, nos sentíamos cómodos programando en python. Y algo dentro de nosotros, en nuestro foro interno nos ayudo a tomar la dura decisión de abandonar PHP (Nuestra lengua mater) y adentrarnos en el cada día mas alucinante universo de python.

Los Amigos

Si, pero no precisamente con los que se toman cervezas los sábados. Me refiero a los “amigos de python”, esa alucinante, profunda y extensa amalgama de utilidades, librerías y frameworks que conviven bajo el cálido ala de python.

Sin lugar a duda, además de “sentirnos bien” programando en ...

» seguir leyendo

Manejo de formularios en Django (Primera Parte)

Una vez más Django acude a salvarnos la vida, esta vez, mediante el manejo de formularios. A nadie le gusta tener que meter a mano todos los campos dentro de un form al estilo de:

cuando tienes la opción de, simplemente, sustituirlo por

{{ form }}

Imaginemos que queremos realizar un formulario que interactúe con la siguiente clase:

class ExampleUser(models.Model):
    
    user = models.ForeignKey(User,unique=True)
    email = models.EmailField(max_length=40,blank=False,unique=True)
    edad = models.IntegerField(blank=False, null=False, default=333)

El caso más sencillo sería desarrollar nuestro propio formulario en python, en un fichero llamado forms.py.

Lo primero de todo es importar los formularios de django, y la clase de la que queremos realizar un formulario.

from django import form.
from example.models import ExampleUser

Y después programar el formulario en sí (en este ejemplo queremos interactuar con el email y la edad de un usuario dado).

class ExampleUserForm(forms.Form):
   
    email = forms.EmailField(max_length=40, required=True)
    edad = forms.IntegerField(required=False)

Este ejemplo es sencillo, y se ve a simple vista la facilidad y potencia que nos otorga Django, pero imaginemos que en lugar de ser una clase con dos ó tres campos, es una clase con cuarenta (o con doscientos). Si no necesitamos realizar grandes alteraciones sobre los campos del modelo (lo que es en el modelo, va a ser en el formulario) podemos echar mano de los modelforms, con lo que nuestra clase quedaría del siguiente modo:

class ExampleUserForm(forms.ModelForm ...

» seguir leyendo

Localización en Django (Internationalization)

En un mercado tan competitivo como el de internet, es prácticamente imprescindible ofrecer nuestros productos en el idioma propio del usuario.

Esta labor de traducción puede resultar bastante tediosa, pero gracias a Django y su soporte para i18n, este trabajo es mucho más llevadero.

Antes de nada, debemos instalar en nuestro sistema las librería gettext, necesaria para compilar los ficheros que contengan las cadenas de texto a traducir.

Simplemente hay que descargarla

curl -O ftp://ftp.gnu.org/gnu/gettext/gettext-0.17.tar.gz

Descomprimimos, y seguimos los pasos habituales:

./configure
make
sudo make install

Mientras nos encontramos desarrollando nuestra aplicación, debemos importar la librería ugettext (dentro de las utilidades de traducción del propio django).

from django.utils.translation import ugettext as _

Para indicar a django que queremos traducir alguna cadena de texto, simplemente tenemos que invocar la función (en este caso "_"):

value = _(u'Texto a traducir')

send_message(user, _('texto que quiero enviar'))

En caso de que vayamos a tratar con contenido dinámico, resulta mucho más interesante utilizar la versión "perezosa" de ugettext (ugettext_lazy), ya que traduce cuando se accede al valor, en vez de hacerlo cuando la función es invocada. Esto nos permitirá, por ejemplo, cargar traducciones dinámicamente en un ChoiceField de un formulario.

from django.utils.translation import ugettext_lazy as _

Si lo que queremos es traducir texto propio de las templates, tenemos que cargar los tags de las traducciones, incluyendo al principio del archivo:

{% load i18n %}

A partir de aquí, para insertar alguna ...

» seguir leyendo

Django Context Processors

Introducción

Gracias a los CONTEXT_PROCESSORS lograremos que cada vez que procesamos una petición en un view, generando y alimentando las diferentes variables que utilizaremos en la template, algunas variable concretas se añadan por defecto a ese diccionario, no teniendo que darlas de alta una y otra vez.

Gracias a la utilización de contextos por defecto lograremos lo siguiente:

  • Evitar alimentar en cada vista las mismas variables con el mismo código, eliminando cualquier posibilidad de error.
  • Conseguir views mucho más descargadas de responsabilidad.
  • DRY (Donʼt repeat yourself).

¿Cómo?

Vamos a crear una función llamada render_response que denominaremos helper a la hora de renderizar templates. Esta función se encargará de realizar el trabajo sucio de requerir y juntar el contexto de nuestro proyecto con las variables que en cada caso particular necesite cada view.

Para ello crearemos (a modo de ejemplo) un fichero util.py dentro de nuestra raiz del proyecto. Dentro del fichero incluiremos la siguiente función:

def render_response(req, *args, **kwargs):
    kwargs['context_instance'] = RequestContext(req)
    return render_to_response(*args, **kwargs )n 10;
}

Lógicamente necesitaremos importar:

from django.shortcuts import render_to_response
from django.template import RequestContext

Ahora necesitamos especificar una nueva función que es la que realmente incluirá nueva información al contexto. Para ello, en ese mismo fichero creamos una función llamada para la ocasión informacion_util la cual simplemente incluirá un saludo.

def informacion_util(request):
    return {"saludo":"Hola desde el Contexto!"}

La idea es hacer esta función tan compleja como necesitemos, esto es solamente un ejemplo funcional.

Por último tenemos que añadir ...

» seguir leyendo