python
Crear versión mobile de una web sobre DJANGO
4
Buscando como hacer una aplicación django apta para escritorio y móviles encontré bastante info, como por ejemplo:
- http://mobiforge.com/developing/story/build-a-mobile-and-desktop-friendly-application-django-15-minutes
- http://stackoverflow.com/questions/1057252/django-how-do-i-access-the-request-object-or-any-other-variable-in-a-forms-clea
- http://stackoverflow.com/questions/164427/change-django-templates-based-on-user-agent
- http://sullerton.com/2011/03/django-mobile-browser-detection-middleware/
- http://opensource.washingtontimes.com/blog/2010/feb/17/loading-templates-based-request-headers-django/
Pero al final la que más me ha convencido la encontré a través de stackoverflow (como no!):
http://stackoverflow.com/questions/2321172/detect-mobile-browser-not-just-iphone-in-python-view
Se basa en el uso de un middleware, el minidetector. En su web hay una brevisima documentación, que además no es correcta
pero tampoco es tan difícil echarlo a andar:
- Nos lo bajamos al directorio de nuestro proyecto:
svn co http://minidetector.googlecode.com/svn/trunk/minidetector
- Lo añadimos a la lista de middlewares en el settyngs..py
'minidetector.Middleware'
- Y ya podemos jugar en las vistas con el parámetro mobile del objecto request, por ejemplo cambiando los templates
def my_mobile_view(request):
if request.mobile:
#do something with mobile
}}}
Ya solo nos falta usar nuetsra framework web mobile preferido (como http://jquerymobile.com)
Gestionando excepciones no capturadas en Python
0Muy interesante el apunte de blackshell, me lo guardo
http://blackshell.usebox.net/archive/excepciones-no-capturadas.html
Hacer busquedas de google desde python
0Tengo un proyectillo personal sobre calcular el posicionamiento de una web en google (dondesalgoengoogle.es, pero aune stá verde solo para uso interno). Como siempre en python hay ya muchas cosas hechas y esta no es un caso distinto. Lo estoy haciendo el django (por eso tanto post sobre él) y usando la librería de catonmat:
http://www.catonmat.net/blog/python-library-for-google-search/
Es bastante sencilla de utilizar:
from xgoogle.search import GoogleSearch, SearchError
try:
gs = GoogleSearch("quick and dirty")
gs.results_per_page = 50
results = gs.get_results()
for res in results:
print res.title.encode("utf8")
print res.desc.encode("utf8")
print res.url.encode("utf8")
print
except SearchError, e:
print "Search failed: %s" % e
Usar cron de manera gráfica en apps django
0
Uno de los problemas típicos en aplicaciones web es el ejecuta trabajos de manera cíclica y programada. En django hay una interesante aplicación que podemos añadir a nuestro proyecto para gestionar tareas que queremos que se ejecuten a una cierta hora unos días concretos. Se trata de django-cronograph y en si documentación encontramos más detalles http://readthedocs.org/docs/django-chronograph/en/latest/overview.html
Realmente es sencilla de usar:
- añadidos la app a nuestro proyecto (copiamos el directorio, la añadimos en settings.py, hacemos un syncdb etc)
- Si queremos ejecutar algún acción de nuestros modelos o similar creamos un nuevo comando de administración de django siguiendo estas instrucciones:https://docs.djangoproject.com/en/dev/howto/custom-management-commands/
- Añadimos una entrada en cron que lance el comando de cronograph
- Desde la parte admin podemos empezar a definir nuestras tareas periodicas.
Super-chuleta de python
0
Vía alfredo me entero de este post http://ubuntulife.wordpress.com/2011/08/27/mega-cheatsheet-de-python-la-chuleta-de-python-mas-completa-que-he-visto-hasta-la-fecha/
y esta magnifica super-chuleta de python (solo le faltan unas patatas de guarnición
) La tenemos en PDF o en ODT (para facilitar su digestión cocinándola a nuestro gusto).
Yo ya la tengo a buen recaudo, para cuando tengo “hambre” de python
Servicio de nube gratuito para php/python/perl/java/…
0La nube está muy de moda. Ya os hablé de gondor. Hoy toca un servicio de nube con buena pinta: dotCloud
Soporta un montón de servicios y otros están en camino:
http://docs.dotcloud.com/services/roadmap/
Y de BBDD lo mismo, tenemos las clásicas mysql, postgresql, mongodb, etc
Hay un plan gratuito donde solo podemos tener 2 servicios. Luego ya empezamos con los planes de pago. Hay que tener en cuenta que un servicio es la base de datos y otro la aplicación.
https://www.dotcloud.com/pricing/
Los precios empiezan desde 99$/mes, que no es poco! Pero también dicen que hay descuentos y ofertas para proyectos FLOSS y educativos.
Implementar un API en tu aplicación django con tastypie
0
Leyendo sobre la djangocon europe me encuentro este fantástico módulo para generar el API de nuestra aplicación django:
Con ella podremos crear en 5 minutos y con pocas lineas el API de nuestra app y lo mejor es que la documentación es “muy jugosa”.
Un ejemplo: http://dondeescalar.es/api/v1/escuela/?format=json
hosting cloud para django: gondor
1Vía genbetadev (que cada día me gusta más), encuentro esta solución para subir a la nube ( como se nos llena la boca con estas palabras buzz
nuestros proyectos de django. Se trata de Gondor.io, de momento solo en beta privada. Puede ser una alternativa al appengine de google.
Una opción si no tenemos un hosting o no queremos pelearnos con todo lo que implica poner “up” un app django.
Las cosas ordenadas en Python
0
Python dispone de una potente funcion para ordenar listas o lo que queramos. Solo hay que mirar la docu para hacernos una idea de su potencia:
http://wiki.python.org/moin/HowTo/Sorting/
Por ejemplo para ordenar un array bidemensional según la segunda columna….
lista=[['uno', 2], ['dos', 1], ['tres', 0]]
print sorted(lista,key=lambda it: it[1])
pygtk: como pedir confirmación al usuario
0A veces en una aplicación PyGT necesitamos pedir al usuario que nos confirme una acción, con esta pequeña función tendremos la solución. Se le pasa como parámetros el texto a monstrar y el título de la ventana.
def pedir_confirmacion(texto,titulo): dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL,gtk.MESSAGE_INFO, gtk.BUTTONS_YES_NO,texto) dialog.set_title(titulo) response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_YES: print "A respondido que sí!" return True else: print "A respondido que no!" return False |
