miércoles, 9 de marzo de 2011

Django en la red con el servidor de desarrollo

No basta con python manage.py runserver [num_puerto], esto sólo lo hace accesible desde loopback, para servir en red hay que hacer

python manage.py runserver [ip_fisica]:[num_puerto]


Para saber nuestra ip podemos hacerlo con ifconfig, evidentemente no podemos usar localhost o 127.0.0.1

jueves, 24 de febrero de 2011

Consultas en Django

Unos pequeños apuntes cogidos al vuelo de consultas en django


Un queryset sería el equivalente a un SELECT
Un filter sería el equivalente a un WHERE

Comandos de Query:
Objeto.objects.all() -> Todo el conjunto
Objeto.objects.filter() -> Un filtro para incluir
Objeto.objects.exclude() -> Un filtro para excluir
Objeto.objects.get() -> Busca un solo objeto

Encadenado de filtros

Entry.objects.filter(
headline__startswith=’What’
).exclude(
pub_date__gte=datetime.now()
).filter(
pub_date__gte=datetime(2005,1,1)
)

Todos los que empiezan por What entre 1/1/2005 y ahora.

Cada filtro crea una consulta única

q1=Entry.objects.filter(headline__startswith=’What’)
q2=q1.exclude(pub_date__gte=datetime.now())
q3=q2.filter(pub_date__gte=datetime(2005,1,1))

Buscar un solo objeto con get()

one_entry=Entry.objects.get(pk=1)
Si no hay datos salta la excepción DoesNotExist

from django.core.exceptions import ObjectdoesNotExist
try:
one_entry=Entry.object.get(pk=numero)
except ObjectDoesNotExist, e:
mensaje=("La entrada %n no existe" % (numero))





En cambio filter()[0], no hace saltar ninguna excepción.

Limitar el número de registros devueltos

Entry.objects.all()[:5] # los cinco primeros
Entry.objects.all()[5:10] # del quinto al décimo

Buscar sobre campos

Básicos: Son de la forma campo__tipobusqueda=valor
Ejemplo: Entry.objects.filter(pub_date___lte=’2006-01-01’) se transforma en select from blog_entry where pub_date<=’2006-01-01’

-> exact : headline__exact=’algo’
-> iexact: case insentive exact
-> contains
-> startswith
-> endswith

Relacionales

Entry.objects.filter(blog__name__exact=’Pep’)

Blogs.objects.filter(entry__headline__contains=’Pep’, entry__pub_date__year=2006)
Todos los blogs que tengan alguna entrada cuyo titulo tenga Pep y se haya publicado en 2006

Blogs.objects.filter(entry__headline__contains=’Pep’).filter(entry__pub_date__year=2006)
Todos los que tengan Pep y todos los que se hayan publicado en 2006

Filtros que referencian a otros campos del mismo modelo

from django.db.models import F
Entry.objects.filter(n_coments__gt=F(‘n_pingbacks’))

gt: greather than
n_pingbacks: valor de otro campo del mismo modelo

Primary key

Blog.objects.get(pk=valor)
.get(pk__in=[1,4,7])
.get(pk__gt=14)

Caching

Esta consulta se realiza dos veces:
print [e.headline from p in queryset]
print [e.pub_date from p in queryset]

Esta, sólo una vez (cacheo de resultados):
queryset=Entry.objects.all()
print [p.headline form p in queryset] <- En esta se cachea
print [p.pub_date form p in queryset] <- en esta su usa la caché

Consultas complejas con Q

Las palabras clave en filter, etc... son ANDs, si queremos algo más complejo, necesitamos Qs

django.db.models.Q

Q(question__startswith=’Who’) | Q(question__startswith=’What’)
Q(question__startswith=’Who’) | ~Q(question__startswith=’What’)
Poll.objects.get( Q(question__startswith=’Who’),

Q(pub_date=date(2005,5,2)) | Q(pub_date=date(2005,5,6)) )


Comparando objetos

Para comparar dos objetos usamos el == estándar de python
una_entrada==otra_entrada

La comparación se realiza siempre usando la clave primaria

Borrando objetos

Entry.objects.filter(pub_date__year=2005).delete()
Borra todos los elementos y los foreign key que le apuntan en cascada

b=Blogs.objects.get(pk=1)
b.delete() -> borra la entrada y todos sus comentarios

Update de varios elementos

Entry.objects.filter().update(headline=’Cambiado’)

Objetos relacionados

Si un modelo tiene un foreign key, podemos acceder al objeto foráneo via simple atributo del modelo:

e=Blog.objects.get(id=1)
e.entry_set.all() --> todas las entradas del primer blog
e.entry_set.filter(headline__contains=’Pep’)

Si se ha usado el related_name en la definición del modelo, entonces ese es el nombre del atributo para acceder

blog=ForeignKey(Blog, related_name=’entries’)

b=Blog.objects.get(id=1)
b.entries.all()
b.entries.count()

Métodos del Foreign Manager:
relacionado.add(ob1, obj2, …) Añade al objeto relacionado
relacionado.create(**kwargs)
relacionado.remove(obj1, obj2, …)
relacionado.clear() -> borra todos los objetos relacionados

O también:
b=Blog.objects.get(id=1)
b.entry_set=[e1, e2, …] <- un objeto iterable

Hacer siempre el save del objeto principal para que permanente.

lunes, 24 de enero de 2011

El futur de l'edició: "Rumbo al Cosmos. Los secretos de la astronáutica" de Javier Casado.


Javier Casado, autor del fantàstic llibre d'astronàutica "Werner Von Braun: Entre el águila y la esvástica" torna a soprener-nos no ja per la habitual qualitat dels continguts si no per la valentía de proporcionar la seva creació amb llicència creative commons i acceptar donacions voluntàries.

Quant acabi de llegir l'obra ja postejaré una nota però per moment us deixo el link de descàrrega per si voleu donar-li una ullada: http://javiercasado.host22.com/index_archivos/Page367.htm

Només que siga la mitat de bo que el de Werner ja val la pena. Escrit amb to rigorós però molt divulgatiu. Un bon llibre per passar una bona estona.

Felicitats Javier!!

jueves, 14 de octubre de 2010

Tiger Cage

Alucinante, electrizante, hipnótica.... esta peli de Hong Kong de 1988. Contiene todos los elementos del género con una realización y coreografía cercanos a la perfección. Fue estrenada en España como "La ira del tigre".
Además, podemos disfrutar de un jovencísimo Donnie Yen al que hemos visto brillar en Flashpoint y no tanto en Yip Man.
La trama, lo de siempre: Infiltrados, agentes dobles, traición, amor y amistad en unos personajes que están siempre al borde de la muerte y precisamente por ello viven la vida con toda intensidad.
Por cortesía de la uploader RoppongiGirl, podemos visualizar la versión original en cantonés con subtítulos en inglés de Tiger Cage.
Que la disfruten.

martes, 28 de septiembre de 2010

viernes, 24 de septiembre de 2010

La integració de les TIC i la Web 2.0 a l'educació

Durante esta semana he estado asistiendo al curso "La integració de les TIC i la Web 2.0 a l'educació", un saludo a todos y un pequeño vídeo a continuación:





Mis Conclusiones

Vaya por delante que esta no es mi área, pero como he dado muchas horas de clase de "informática" y me considero un tecnólogo me atrevo a sintetizar estas cuatro ideas.
  • Las TI entrarán de una manera u otra en el aula. La escuela no puede ser una barrera de entrada a lo que ocurre en la calle.
  • La tecnología se hace cada vez más transparente. La web2.0 no es más que eso, la democratización de la publicación de contenidos y el fácil acceso a ellos.
  • Creo que los mayores esfuerzos deben hacerse en la formación del profesorado más que en la formación de los alumnos.
  • Como en todos los campos, hay una serie de "personas clave" que con su desinteresado trabajo arrastran al resto de educadores a la adopción racional de las TI en la educación. Un reconocimiento para ellas.

Desempaquetando un Kindle DX

Necesitaba un dispositivo de lectura con el que poder gestionar una gran cantidad de documentación para leerla.

Por causas que describiré en otro post en vez del ipad he decidí adquirir el lector de ebooks Kindle de Amazon.

Aprovecho la ocasión para compartir la experiencia de compra con vosotros por si estáis pensando adquirir uno o estáis buscando info en español.

Compra

Nunca me acostumbraré a recibir en dos días un paquete desde la costa oeste de EEUU cuando lo normal es que uno desde Madrid tarde cuatro o cinco, pero este es el poder de Amazon: Comprar y recibir prácticamente al día siguiente el libro o, en este caso, el ebook. Un diez.

Desempaquetado

Paquete


Caja


Original sistema de apertura "Rollo literario"


Done!


Aquí lo tenemos...


Vista del alto


Tapa trasera de alumnio


Vista lateral


Vista frontal


Controles navegación texto


Getting started


Micro USB





Conectividad






Navegación





De momento, esto es todo. Así como vaya usando el dispositivo iré subiendo mis impresiones.