MüchiGame: La web del juego del mundo de los Müchis para el 1er Concurso Universitario de Software Libre

Del modelo de datos a XML y UTF-8

¿Cómo hace MüchiGame para pasar el modelo de datos (con lógica de programación o no del juego) a un fichero XML?
Necesitamos utilizar métodos inteligentes para recuperar los datos desde Django, para ello utilizaremos JSON, serializándolos por medio del conjunto de utilidades disponible:
_____________
>>> from django.utils import simplejson
>>> datos = {’nombre’: ‘juax’}
>>> simplejson.dumps(datos)
‘{”nombre”: “juax”}’
>>> datos = [{’nombre’: ‘juax’}, {’nombre’:'eva’}, {’nombre’: ‘nieves’}]
‘[{”nombre”: “juax”}, {”nombre”: “eva”}, {”nombre”:”nieves”}]’
_____________
EJEMPLO UTILIZANDO UNA VISTA:
_____________
from django.utils import simplejson
def json_jugador(request, idjugador):
jugador = Jugador.objects.filter(id=idjugador)
json = simplejson.dumps(jugador)
return HttpResponse(json,mimetype=’application/json’)
_____________
Ahora debemos serializar el resultado, debemos definir la URL (muchigame/juego/urls.py) que llamará a la vista del framework de JSON en Django:
URL:
_____________
(’^json/jugador/(\d+)/$’, views.json_jugador)
_____________

VISTA:
_____________
from django.core.serializers import serialize
def json_jugador(request, idjugador):
jugador = Jugador.objects.filter(id=idjugador)
json = serialize(’json’, jugador)
return HttpResponse(json,mimetype=’application/json’)

y quedaría así:
_____________
[{
“pk”: “1”,
“model”: “muchigame.juego.Jugador”,
“fields”: {
“nombre”: “Juax”,
“f_alta”: “20061105”,
“etc”: “etc”}
}]
_____________
Con ésta pequeña introducción habremos comprendido el funcionamiento del framework para usar AJAX y recibir respuestas rápidas. Veamos como se produce ahora la traducción a XML de los datos…
Igual que antes, primero definimos la URL que usaremos para obtener la información (muchigame/juego/urls.py):
_____________
(’^xml/jugador/(\d+)/$’, views.xml_jugador)
_____________
Evidentemente ahora vamos a declarar la vista como antes:
_____________
from django.core.serializers import serialize #carga la libreria para serializar
def xml_jugador(request, idjugador):
jugador = Jugador.objects.filter(id=idjugador)
#id lo pone por defecto django en la tabla
xml = serialize(’xml’, jugador)
return HttpResponse(xml,mimetype=’application/xml’)
_____________
El resultado obtenido en XML es el siguiente:
_____________



Juax
20061105
etc


_____________
Si queremos ser aún más elegantes podemos utilizar las vistas genéricas pero éstas no siempre nos ofrecen todo lo que necesitamos:
_____________
from django.views.generic import list_detail
# …
(’^/listar_jugadores/$’, list_detail.object_list,{’queryset’: Jugador.objects.all()})
_____________

* Hasta que no arregle el segundo problemilla de mi host dedicado (que para algo lo pago) no podré utilizar en él Django con Apache, así que me veo obligado a usar datos generados para el simulador del juego en DHTML…

Para que el sistema al completo acepte cualquier lenguaje se utiliza la codificación UTF-8 en todos sitios, me explico:

  1. Base de datos con MySQL en UTF-8 ( ver GranadaPHP para conseguir una clase en PHP con el “soporte activado”).
  2. Utilizar ficheros, a ser posible,codificados y almacenados en UTF-8 (en los editores) para no llevarse sorpresas en diferentes combinaciones de sistemas operativos / lenguajes…
  3. Usar el parámetro de configuración de Apache: "AddDefaultCharset UTF-8" en el fichero .htaccess del directorio web principal.
  4. Correos en HTML ( ver la clase de correo en PHP disponible en GranadaPHP )
  5. Por último pero no menos importante, hacer que los ficheros HTML,XML,etc. estén en dicha codificación con las etiquetas correspondientes,
    HTML con : <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8″ />
    y XML con :

Así dispondremos de acentos y carácteres especiales tanto en español como en cualquier otro lenguaje…

8 de April de 2007 - Posted in Noticias, Ingeniería |

Aún no hay comentarios. Sé el primero.

Deja una respuesta

Debes de haber ingresado para comentar.