Archive for the 'django' Category

Problemas con django, DJANGO_SETTINGS_MODULE

Problemas con variables de entorno de django concretamente DJANGO_SETTINGS_MODULE.
Error

ENVIRONMENT_VARIABLE
ImportError: Settings cannot be imported, because environment
variable DJANGO_SETTINGS_MODULE is undefined.

El interprete de python no tiene valor para la variable DJANGO_SETTINGS_MODULE.

Solucion
Una facil es arrancar el interprete desde el directorio del site y arrancarlo asi:

python manage.py shell

y listo, otra manera mas elegante es desde vuestro interprete preferido (console, pyshell, etc…) ejecutar al principio de todo algo asi como esto:

from django.conf import settings
settings.configure()

Y con esto y un bizcocho hasta mañana a las 8.

Mis experiencias con Django

Queda inaugurada la sección de experiencias con Django, ale a chafardear un poco la pagina donde iré agregando artículos sobre django…

PAMI: Aprendiendo DJANGO con ejemplos(3): Trabajando

En el ultimo post, conseguimos enviar objetos javascript via JSON a nuestro servidor, la información es serializada en la base de datos en este capitulo.

Antes de empezar, dejarme allanar el camino, el schema (estructura) de la Base de datos es modificada de esta forma:

PYTHON:
  1. class Book(models.Model):
  2.     isbn = models.CharField(maxlength=10, primary_key=True)
  3.     pub_date = models.DateField(’data published’)

La razón de este cambio la encontramos en que AWS devuelve ISBN-10 como ASIN, Podremos sacar provecho de ello, Otro cambio es la substitución de DateTimeField by DateField para el atributo pub_date. Django no soporta seamless database scheme hasta el momento. Debermos eliminar la basede datos y regenerar tal y como esta descrito. El username/password para la nueva database es admin/gelman como costumbre.

Es bastante molesto un error 500 sin ninguna razón, El servidor Web de Django se come la excepcion por naturaleza, podremos contralar el bug sospechoso con un codigo try/except como este:

PYTHON:
  1. try :
  2.           // database access
  3.     except :
  4.           print sys.exc_info()[0]

Bien, InterfaceError o IntegrityError es el error que muestra en la inserción en la Base de datos, pero porque? las shells interactives son nuestras mejores amigas, podemos usar pdb o [HTML]python manage.py shell[HTML].

Mea culpa, olvidamos que el valor de regreso de get_or_create es una tupla, en vez de un objeto, y para la relación de muchos a muchos, no nos vale simplemente con el conjunto de valores de la lista, necesitamos usar un metodo add despues de que el objeto sea contruido:

PYTHON:
  1. for item in simplejson.loads(request.POST[‘items’]):
  2.      publisher, created = Publisher.objects.get_or_create(name=item[‘publisher’])
  3.      authors = [Author.objects.get_or_create(name=au) for au in item[‘authors’]]
  4.      authors = [author for (author, created) in authors];
  5.      y,m,d = [int(x) for x in item[‘pub_date’].split(‘-’)]
  6.      pub_date = date(y, m, d)
  7.      book, created = Book.objects.get_or_create(isbn=item[‘isbn’], name=item[‘title’],
  8.        pages=300, pub_date=pub_date, publisher=publisher)
  9.      book.authors.add(*authors)
  10.     #print sys.exc_info()[0]
  11.    return HttpResponseRedirect(‘/admin/library/book/’)

Llegamos al final, debemos hacer un redirect del navegador a la nueva url.

Al parecer la base de datos esta actualizada pero la pagina no se redirije, desde que es lanzado el post en una petición AJAX, necesitamos enviar un objeto JSON como respuesta. En el servidor, simplejson.dump es usado:

PYTHON:
  1. xhr = {’succeed’: [], ‘failed’: []};
  2.     for item in simplejson.loads(request.POST[‘items’]):
  3.      # … ….
  4.      try :
  5.          book, created = Book.objects.get_or_create(isbn=item[‘isbn’], name=item[‘title’],
  6.                  pages=300, pub_date=pub_date, publisher=publisher)
  7.          book.authors.add(*authors)
  8.      except :
  9.          xhr[‘failed’].append(item[‘title’])
  10.      xhr[’succeed’].append(item[‘title’])
  11.  
  12. return HttpResponse(simplejson.dumps(xhr), mimetype=‘text/javascript’);

En el cliente, evaluaremos el string JSON que propaga los nodos del DOM.

JavaScript:
  1. dojo.xhrPost({
  2.           url: dojo.byId(“book_form”).action,
  3.           content: { items: dojo.toJson(formdata) },
  4.       }).addCallback(function(response) {
  5.           var result = dojo.fromJson(response);
  6.           var messages = dojo.query(“ul[@class=messagelist])[0]
  7.           dojo.forEach(result.failed, function(item) {
  8.               var msg = document.createElement(“li”);
  9.               msg.innerHTML = “<li><em>” + item + “</em> <strong>failed</strong> to add.</li>”
  10.               messages.appendChild(msg);
  11.       });
  12.       dojo.forEach(result.succeed, function(item) {
  13.           var msg = document.createElement(“li”);
  14.           msg.innerHTML = “<em>” + item + “</em> successfully added.”
  15.           messages.appendChild(msg);
  16.       });
  17. });

El resultado final tiene esta pinta:
Add books with feedback

check r19 para los detalles.

REVIEW: Que es Arkayne y como funciona

Arkayne es un gran proyecto que escribiré largo y tendido sobre su parte de creación de portales.

Vamos con una pequeña traducción: (fuente: http://www.arkayne.com/intro/)

Cansado de no encontrar la pagina que te gustaría?

En tus archivos, tampoco.
Tu motor de búsqueda favorito o otro, nada.
Comienzas a arrancarte el pelo y teclear violentamente... nada.
Después de preciosos minutos filtrando a traves de la basura que mueves cada día.

Este es el sentimiento y el odio que he tenido cuando intentaba escribir un buen post, por eso cree Arkayne, con el proposito de estar seguro de encontrar un articulo lo mas parecido posible al que acabo de leer, a todos nos gusta tener diversas opciones, ahora tus lectores tendrán una buena experiencia con Arkayne en tu blog.

Automáticamente se linkaran tus paginas con contenido similares vía Arkayne. Tu das el contenido, Arkayne linka tu pagina con usuarios que están navegando por paginas similares.

Uso: Usando la red de Arkayne atraerás usuarios interesados en el contenido de tus paginas.
Donde: Cualquier blog, articulo, website o publicación on-line similar a tu contenido.
Blogs: Facilidad de incrustar el Widget de Arkayne en tu blog.

El widget empieza a trabajo en menos de 15 minutes, se compara tu contenido con cientos de otros usuarios, es un trabajo duro, igual que el vino bueno, Arkayne gana con la edad, manten el widget durante unos cuantos días ganaras con los resultados.

Arkayne busca lugares similares a lo que estas viendo es tremendamente útil para el usuario, ya que debemos presuponer que al usuario le interesaran websites similares.

Posibilidades muchas, se pueden crear muchos portales verticales, alimentándote de feeds, al mas puro estilo agregador, pero añadiendo contenido para enriquecer la visita del usuario.

Cuando acabe con 22d me planteare hacer un vertical de esos que mueven tanta pasta a ver si suena la campana.

« Previous PageNext Page »