martes, 22 de enero de 2013

Django guía ultra rápida (en proceso)

Considero que hay una infinidad de tutoriales por la red relacionados con Django así que me limitare a poner referencias que me vayan sido utiles así como algunos comandos que sean los que más voy utilizando, espero les sea de utilidad, igual se aceptan sugerencias y correcciones :)

TERMINAL

Crear Proyecto
$ django-admin.py startproject [nombreproyecto]

Crear App
$ python manage.py startapp [nombreapp]

Validar Modelos
$ python manage.py validate

Sincronizar base de datos
$ python manage.py syncdb

Crear superusuario
$ python manage.py createsuperuser

Correr el Servidor
$ python manage.py runserver 192.168.0.1:80
NOTA: La ip y el puerto son opcionales si no se especifican por omisión correo en 127.0.0.1:8000



CARACTERES Y FORMATOS

Codificación UTF8
Al inicio del archivo colocar
# -*- encoding: utf-8 -*-



MODELOS
Ejemplo archivo: models.py

from django.db import models
from django.contrib.auth.models import User

class Refs():
    sexo = ((‘F’,‘Femenino’),(‘M’,‘Masculino’))
    estado_civil = ((‘S’,‘Soltero’),(‘C’,‘Casado’),(‘U’,‘Unión Libre’),(‘D’,‘Divorciado’),(‘V’,‘Viudo’))

class Persona(models.Model):

    usuario = models.ForeignKey(User)
    nombre = models.CharField(max_length=100)
    clave = models.IntegerField(verbose_name=u’La Clave’)
    municipio = models.ForeignKey(Municipio)
    tipo = models.ForeignKey(Tipos,null=True,blank=True)
    cursos = models.ManyToManyField(Curso)
    universidades = models.ManyToManyField(Universidades, through=‘Uni_Per’)
    activo  = models.BooleanField(default=True)
    obs = models.TextField(max_length=500)
    sexo = models.CharField(max_length=1, choices=Refs.sexo, default='F')


    def __unicode__(self):
        return (u’ %s >> %s’) % (self.nombre, self.tipo)

    class Meta:
        verbose_name=u'Descripción Singular del Modelo'
        verbose_name_plural=u'Descripción Plural'

class Curso(models.Model):
    nombre = models.CharField(max_length=50)

class Universidad(models.Model):
    nombre = models.CharField(max_length=50)

class Uni_Per(models.Model):
    persona = models.ForeignKey(Persona)
    universidad = models.ForeignKey(Universidad)
    promedio = models.DecimalField(decimal_places=2,max_digits=4)
    titulacion = models.DateField(verbose_name=u’Fecha de Titulación’)



ADMINISTRADOR DE DJANGO
Ejemplo archivo admin.py
 

Agregar un modelo al admin

from django.contrib import admin
from catalogos.models import *
admin.site.register(Universidad)
admin.site.register(Persona)
admin.site.register(Curso)



VISTAS
Ejemplo de un archivo views.py

from django.http import HttpResponse
import datetime

def fecha_actual(request):
    now = datetime.datetime.now()
    html = "El día de hoy es %s." % now
    return HttpResponse(html)




URL
Ejemplo de un archivo urls.py, que tiene activado además el admininistrador de Django.

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

 
urlpatterns = patterns('',

    # Vista inicial
    url(r'^$', 'miapp.views.fecha_actual', name='fecha_actual'),


    # Uncomment the next line to enable the admin:
    url(r'^control/', include(admin.site.urls)),
)





Otras utilerías
Usar bootstrap en Django
El API Form de Django


 

viernes, 18 de enero de 2013

Django Error 'str' object is not callable base.py in get_response

Después de desarrollar una vista me tope con este error que parece ser algo sencillo pero no encontraba como solucionarlo, bien el detalle era que en mi archivo url.py tenía:

url(r'^prueba/', 'prueba_view', name='prueba'),

Para solucionarlo la línea debe ir así:

url(r'^prueba/', 'campo.views.prueba_view', name='prueba'),

En otras palabras se debe especificar la ruta completa para no tener problema alguno.


Espero te sea de utilidad !



Referencias:
http://stackoverflow.com/questions/4668040/django-str-object-is-not-callable

martes, 15 de enero de 2013

Firebird agregar usuarios o crear usuarios con gsec

Por lo que estuve buscando no existe una instrucción SQL para crear un usuario utilizando Interbase o Firebird 1.5 todo debe ser utilizando el comando GSEC aquí veremos como emplearlo:

$ gsec -user sysdba -password tucontraseña
gsec>add usuarionuevo -pw passwordusuarionuevo -lname etiquetanombre
gsec>quit
$ _

Listo con eso el usuario queda creado ahora para darle permisos si podemos utilizar sql:
GRANT SELECT, UPDATE, INSERT, DELETE ON USUARIOS TO usuarionuevo

Con eso se le aplican los permisos sobre la tabla usuarios al usuario nuevo.



Espero te sea de utilidad !


Más información:
http://www.destructor.de/firebird/gsec.htm
http://www.firebird.com.mx/descargas/documentos/tema_5-administracion_y_seguridad.pdf
http://www.firebirdsql.org/refdocs/langrefupd25-security-grant-revoke.html





miércoles, 9 de enero de 2013

Conectar Python con Firebird

Hoy definitivamente ando bien Python ;) ... El siguiente documento es para conectar Python con Firebird, lo realizo en Mac OSX pero debiera ser similar para Windows:

Para poder realizar la conexión Python - Firebird, primero es importante tener instalado el Firebird en el equipo la versión que utilizaremos debe ser compatible con la versión 2 o superior ...
http://sourceforge.net/projects/firebird/?source=dlp

Una vez que se haya descargado debemos ejecutar la el pkg de instalación.

Posteriormente es probable que tengamos que editar el ~/.bash_profile con las siguientes líneas:
export FIREBIRD_HOME=/Library/Frameworks/Firebird.framework/Resources
export PATH=$PATH:$FIREBIRD_HOME/bin
Más información en:
http://www.firebirdsql.org/file/documentation/papers_presentations/html/paper-fb-macosx-install.html
Uso de la terminal:
http://www.firebirdsql.org/manual/es/qsg15-es-connecting.html#d0e1215


Una vez instalado el Firebird, existen varios controladores (Driver) para conectar python con firebird, pero este fue el que mejor me dio resultado ya que esta desarrollado usando solo python:

https://github.com/nakagami/pyfirebirdsql/archive/master.zip
Más información aquí: https://github.com/nakagami/pyfirebirdsql

Una vez descargado y descomprimido entramos al directorio y corremos el siguiente comando:
$ sudo python setup.py build

Si hubo errores, después del comando anterior revisa la conectividad y funcionamiento de firebird, en caso de que todo haya salido bien, entonces procedemos con el siguiente comando:
$ sudo python setup.py install

Podemos probar que haya quedado instalada la librería usando el shell de python e importando la librería firebirdsql.

El siguiente fragmento de código es para ejemplo de conectividad:
_________________________________

# Conectarse a la base de datos de firebird
import firebirdsql as fb

# Conectar con la base de datos
con = fb.connect(dsn='127.0.0.1:c:\\base.gdb',user='miusuario', password='miclave')

# Se crea el cursor de la conexión
cur = con.cursor()

# Ejecuta el comando SQL
cur.execute(" select clave, nombre from municipios ")

# Imprime los municipios encontrados en la base de datos ...
for row in cur:
print str(row[0])," > ",str(row[1])

_________________________________

Sitios de Referencia:
http://maxirobaina.tumblr.com/post/27867131429/firebird-sql-estado-del-driver-para-python
http://nakagami.github.com/pyfirebirdsql/installation.html
[ Tutorial de la librería ] http://nakagami.github.com/pyfirebirdsql/tutorial.html
http://www.fpress.com/revista/Num0704/unart6.htm
http://stackoverflow.com/questions/11787012/how-to-install-mysqldb-on-mountain-lion
[ Tutorial del terminal ] http://www.firebirdsql.org/manual/es/qsg15-es-connecting.html#d0e1215



Espero te sea de utilidad !




Enviar correo electrónico desde python en gmail con smtplib


Con el requerimiento de enviar correos automatizados me vi en la necesidad de este script en python les dejo parte del código ...

_________________________________

# -*- coding: utf8 -*-

#Importar la librería de SMTP ...
import smtplib

#Tu correo o el correo que enviará los mensajes ...
FROM = "micorreo1@gmail.com"

#Lista de correos a enviar ...
TO = ['destinatario1@gmail.com','destinatario2@gmail.com']

#Correos que se verán en la sección PARA del correo ...
TOstr = 'micorreo1@gmail.com'

#Comandos que serán enviandos al servidor de gmail ...
server = smtplib.SMTP('smtp.gmail.com',587)
server.ehlo()
server.starttls()
server.ehlo

#Es necesario logearse con el servidor utilizando tu cuenta micorreo1@gmail.com y tu clave.
server.login(FROM,'miclave')

# Crear el encabezado del correo
header = 'To:' + TOstr + '\n' + 'From: ' + FROM + '\n' + 'Subject:Reporte hoy \n'
print header

# Unir el encabezado con el mensaje ...
msg = header + '\n Esta es una prueba \n\n'

# Una vez que se haya pasado lo anterior ahora si a enviar ...
server.sendmail(FROM,TO,msg)
print "Listo !"

# Cerramos sesion ...
server.quit()


_________________________________

Estos sitios me sirvieron de referencia:
http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
http://stackoverflow.com/questions/6941811/send-email-to-multiple-recipients-from-txt-file-with-python-smtplib



Espero te sea de utilidad, saludos !