Entries for Django

Cómo instalar MediaWiki dentro de un sitio Django con Apache2

written by uve

4 May 2011

La idea es bastante sencilla. Disponemos de un sitio web en el que vamos a añadir MediaWiki en /wiki/. Así, por ejemplo, si nuestro dominio es http://www.plagaos.com/, en el cuál hay un proyecto Django en despliegue, vamos a tener http://www.plagaos.com/wiki/ sin que afecte al sitio. Además, MediaWiki hará uso de PostgreSQL.

Full entry >>

Flatpages en Django 1.3: cómo saber la página activa

written by uve

30 April 2011

Flatpages es una aplicación disponible en contrib que nos permite crear páginas planas en HTML. Si no necesitamos algo complicado y queremos añadir páginas estáticas a nuestro sitio, esta es nuestra aplicación.

En Django 1.3 han añadido un template tag para realizar un listado de las páginas. Aquí podemos ver el ejemplo disponible en la página oficial:

{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
    {% for page in flatpages %}
        <li><a href="{{ page.url }}">{{ page.title }}</a></li>
    {% endfor %}
</ul>

Pero si con este listado queremos hacer un menú, siempre es interesante destacar la página en la que estemos situados.

Full entry >>

Fallo de autenticación en PostgreSQL utilizando Django

written by uve

12 April 2011

Estoy haciendo un pequeño despliegue de una aplicación de pruebas y lo estaba haciendo con PostgreSQL. Tras crear el usuario, dar permisos y todo lo típico, me he encontrado con lo siguiente:

# python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 351, in handle
    return self.handle_noargs(**options)
  File "/usr/lib/pymodules/python2.6/django/core/management/commands/syncdb.py", line 52, in handle_noargs
    cursor = connection.cursor()
  File "/usr/lib/pymodules/python2.6/django/db/backends/__init__.py", line 75, in cursor
    cursor = self._cursor()
  File "/usr/lib/pymodules/python2.6/django/db/backends/postgresql_psycopg2/base.py", line 136, in _cursor
    self.connection = Database.connect(**conn_params)
psycopg2.OperationalError: FATAL:  la autentificación Ident falló para el usuario <<xxxx>>

Full entry >>

'WSGIRequest' object has no attribute 'LANGUAGE_CODE'

written by uve

14 March 2011

Un problema breve, una solución breve. Hace un poco tiempo estuve programando una página con soporte para internacionalización sobre Django 1.2 y me encontré con lo siguiente:

Request Method:    GET
Django Version:    1.2
Exception Type:    AttributeError
Exception Value:   
'WSGIRequest' object has no attribute 'LANGUAGE_CODE'

Tras seguir la traza, llegué a la vista que estaba ocasionando el problema. En esta vista tenía algo como lo siguiente:

def view(request):
    ...
    language = request.LANGUAGE_CODE
    ...

El problema: no está bien configurado el middleware. La solución:

MIDDLEWARE_CLASSES = (
    ...
    'django.middleware.locale.LocaleMiddleware',
    ...
)

Full entry >>

Guardar ficheros subidos mediante FileField en un lugar distinto a MEDIA_ROOT en Django

written by uve

24 February 2011

Muy brevemente voy a explicar cómo podemos guardar ficheros en una ubicación distinta a MEDIA_ROOT. Esto es especialmente útil cuando quieres subir ficheros que puedan consultar los usuarios logueados, pero quieres que no tengan un acceso público (como todo el contenido de media):

 

from django.core.files.storage import FileSystemStorage

sistema_almacenamiento = FileSystemStorage(location='/ubicacion/distinta/a/media/')

class MiModelo(models.Model):
   file = models.FileField(upload_to='ficheros', storage=sistema_almacenamiento)

¡Cuidado con los permisos de los directorios!

 

Full entry >>

Publicando automáticamente en Twitter

written by uve

28 January 2011

Básicamente este post se trata de una prueba simple. Estoy trabajando en un sistema para que automáticamente se publique un tweet al añadir una entrada.

Si el tiempo me lo permite, en los próximos días trataré de explicar como he realizado el proceso para conectar a Twitter desde Python. Adelantar que el software utilizado es tweepy.

Full entry >>

Testear tu proyecto en Django 1.3 beta con VirtualEnv

written by uve

19 January 2011

Ayer escribía una breve introducción acerca de VirtualEnv. Hoy voy a poner de manifiesto un posible uso. Para los entusiastas de nuevas features, como yo, pueden ir testeando proyectos y aplicaciones durante el desarrollo de Django e ir adaptando el código para que sea funcional.

Full entry >>

Django, forms y ugettext: "TypeError: Lazy object returned unexpected type."

written by uve

7 January 2011

Estaba programando tranquilamente un formulario (ModelForm) y de repente deja de renderizarse. Reviso la vista, el código de retorno, el HTML de salida... pero todo está correctamente salvo que el formulario no se visualiza.

El código es el siguiente:

models.py

from django.db import models
from django.utils.translation import ugettext_lazy as _

class MiModelo(models.Model):
    ...
    campo = models.CharField(_(u''), ...)

forms.py:

from django import forms

class MiForm(forms.ModelForm):
    class Meta:
        model = MiModelo

Aparentemente todo está bien. Pero al ejecutar desde el shell (python manage.py shell) y tratar de renderizar el formulario me encuentro con el error:

TypeError: Lazy object returned unexpected type.

Full entry >>

Agujero de seguridad generando contenido dinámico para una ForeignKey

written by uve

24 December 2010

Hace un rato os contaba como generar contenido dinámico para una ForeignKey de un formulario, y mientras escribía he descubierto un agujero de seguridad.

Si modificamos el HTML del formulario, donde se selecciona el usuario, podemos cambiar el identificador del usuario manualmente y se añadiría de encargado a un usuario no permitido.

Full entry >>

Generar contenido dinámico de una ForeignKey para un Form en Django

written by uve

24 December 2010

Vamos a plantear el siguiente escenario:

class Grupo(models.Model):
   usuarios = models.ForeignKey(User)

class Lista(models.Model):
   grupo = models.ForeignKey(Grupo)
   encargado = models.OneToOneField(User)

El objetivo es generar formularios para Lista donde el encargado sea un usuario del grupo.

Full entry >>

Llamar a una función que recibe un parámetro desde una plantilla en Django

written by uve

24 December 2010

Quien haya profundizado un poquito en el sistema de plantillas que ofrece Django sabrá que solamente se pueden invocar a funciones que no reciban parámetros.

Existe una forma de hacer esto, aunque no sé hasta que punto es correcta. Si es forzosamente necesario hacerlo, aquí explico como se puede hacer.

Full entry >>

Cómo crear objetos automáticamente al ejecutar syncdb en Django

written by uve

21 December 2010

Vamos a suponer una aplicación de noticias y etiquetas. Queremos que siempre exista una etiqueta 'general' que se usará en las noticias por defecto. Por supuesto, queremos automatizar el proceso, ya que es un coñazo tener que hacerlo manualmente cada vez que se crea la base de datos.

Para ello vamos a hacer uso del mecanismo de señales que ofrece Django.

Full entry >>

Breves: Cómo listar los idiomas disponibles en Django

written by uve

6 December 2010

>> from django.conf import settings
>> map(lambda lang_tuple:lang_tuple[0], settings.LANGUAGES)
['es', 'en', 'de']

Full entry >>

Cómo hacer en Django una migración manual en producción

written by uve

26 November 2010

Últimamente tengo aún menos tiempo, ya que estoy aprovechando PlagaOS para actualizar los módulos de MenudoProblema y crear algunos módulos que incorporaré más adelante. Pero aquí os dejo un pequeño problema:tras explorar la limitaciones de Django FlatPages decidí hacerme mi propio módulo de páginas estáticas. Lo desarrollé, lo incluí en la página del proyecto, hice el despliegue y como no, acabé haciendo un cambio en el modelo.

Full entry >>

Crear una base de datos MySQL para Django

written by uve

22 September 2010

Ya he escrito en varios artículos como crear una base de datos en MySQL. Para evitar repetir esto continuamente, voy a detallar la creación de una base de datos específica para Django.

Full entry >>

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.