Daniel Maldonado

jueves, 26 de noviembre de 2015

Como actualizar #Django

Voy a aprovechar que hace unos días se corrigió una vulnerabilidad importante de seguridad en Django para mostrarle como podemos hacer para actualizarla si lo instalamos desde PIP.


Para conocer la información del paquete actual de Django podemos ejecutar el siguiente comando:

$ pip show Django
---
Metadata-Version: 2.0
Name: Django
Version: 1.8.6
Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Home-page: http://www.djangoproject.com/
Author: Django Software Foundation
Author-email: foundation@djangoproject.com
License: BSD
Location: /usr/local/lib/python2.7/dist-packages
Requires:

Actualmente ya se encuentra la versión 1.8.7 disponible tal y como fue anunciado en la web del proyecto.

Para lograr actualizarlo podemos ejecutar:

$ pip install --upgrade Django

Collecting Django
  Downloading Django-1.8.7-py2.py3-none-any.whl (6.2MB)
    100% |████████████████████████████████| 6.2MB 59kB/s 
Installing collected packages: Django
  Found existing installation: Django 1.8.6
    Uninstalling Django-1.8.6:
      Successfully uninstalled Django-1.8.6
Successfully installed Django-1.8.7

Y finalizamos el proceso cuando verificamos por medio de la consola interactiva de Python

$ python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print django.get_version()
1.8.7

Muy simple y gracias a las oportunidades que nos brinda pip de mantener nuestro entorno siempre actualizado.

Saludos!

miércoles, 25 de noviembre de 2015

Como crear una aplicación en #Django

Ahora que ya tenemos un proyecto creado en Django, es necesario comenzar a trabajar con Aplicaciones.


Este es un concepto que generalmente tienden a confundirse con los proyectos en Django. Una aplicación podemos definirla como un paquete creado para realizar una funcionalidad en particular dentro de nuestro proyecto, por otro lado un proyecto sería un conjunto de aplicaciones dentro de nuestra web.

A los que trabajamos con Symfony2 podemos hacer una comparativa de las Aplicaciones de Django con los Bundles.

Afortunadamente, Django cuenta con su generador tanto de archivos como de directorios para mantener siempre nuestros proyectos bien organizados y a esto lo podemos ejecutar de la siguiente manera:

$ ./manage.py startapp cursos -v 3

Rendering app template files with extensions: .py
Rendering app template files with filenames: 
Creating Proyectos/Django/elcodigok/cursos/models.py
Creating Proyectos/Django/elcodigok/cursos/tests.py
Creating Proyectos/Django/elcodigok/cursos/__init__.py
Creating Proyectos/Django/elcodigok/cursos/admin.py
Creating Proyectos/Django/elcodigok/cursos/views.py
Creating Proyectos/Django/elcodigok/cursos/migrations/__init__.py

La aplicación que creamos se llama cursos y como vimos, generó un directorio con el mismo nombre y algunos archivos más:

cursos/
    __init__.py
    admin.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Como podemos ver, en cada aplicaciones podemos definir las entidades con las que vamos a trabajas, las vistas, url, etc.

Para el próximo paso, vamos a comenzar a trabajar con bases de datos, definiendo los motores que Django soporta y algunos trabajos más con nuestro proyecto.

Saludos!

viernes, 20 de noviembre de 2015

Primeras pruebas con #Symfony 2.8.0-BETA1

Se que por el momento Symfony 2.8.0-BETA1 no es justamente una versión estable para iniciar con un proyecto desde cero, pero que más da, ya se encuentra para comenzar a jugar o por lo menos ir anticipándonos que es lo que la versión 2.8.x y 3.0.x nos va a traer en el futuro y con algo de maduración.


Por eso dije, hoy es el momento de probarlo y ver que encontramos de interesante.

Primero vamos a tener que descarga el instalador de Symfony2 tal y como se recomienda en la web oficial:

$ curl -LsS http://symfony.com/installer -o symfony
$ chmod +x symfony

Siempre es recomendable tener instalada la última versión del instalador

$ ./symfony -V
Symfony Installer version 1.3.3

Todo esta listo para descargar la versión 2.8.0-BETA1 de la siguiente forma

$ ./symfony new pruebaSymfony 2.8


Veamos que nos trae de nuevo los comandos de Symfony2

$ cd pruebaSymfony/
$ php app/console

Y lo que podemos hacer rápidamente es iniciar el servidor para ver el entorno de Dev y su nuevo profiler que Symfony2 nos tiene preparado.

$ php app/console server:run                                            
 [OK] Server running on http://127.0.0.1:8000



Bonito verdad? No dejen de probar sus generadores de Bundle, Entidades y todas las funcionalidades de Doctrine.

Saludos!

jueves, 19 de noviembre de 2015

Como configurar un proyecto de #Django y #Git

Ahora que creamos nuestro proyecto en #Django y estamos investigando es un buen momento para agregar e incorporar al trabajo un sistema de control de versiones como #Git


La idea es que en nuestro entorno de desarrollo tengamos git y de esta forma hacer uso de la siguiente manera:

$ cd elcodigok/
$ git init .
Initialized empty Git repository in /home/dmaldonado/Django/elcodigok/.git/

Sobre este directorio, podemos crear el archivo para que ignore el seguimiento de otros archivos. Si bien no encontré uno adecuado para proyectos en Django, les propongo utilizar uno muy simple para el lenguaje de Python.

$ vim .gitignore

y agregamos las siguientes líneas:

__pycache__/
*.py[cod]
*.log

Ahora bien, solo queda comenzar a realizar el tracking de nuestro proyecto

$ git add .
$ git commit -m "Inicio de un proyecto en Django."
[master (root-commit) cc8de61] Inicio de un proyecto en Django.
 6 files changed, 152 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 elcodigok/__init__.py
 create mode 100644 elcodigok/settings.py
 create mode 100644 elcodigok/urls.py
 create mode 100644 elcodigok/wsgi.py
 create mode 100755 manage.py

Para seguir consultando el árbol de cambios podemos ejecutar:

$ git log --graph --oneline 
* cc8de61 Inicio de un proyecto en Django.

Simple y rápido. Saludos!

miércoles, 18 de noviembre de 2015

La guía definitiva de #Django

Necesitan documentación y material para complementar cada una de las cosas que aprenden en #Django? Este libro es sin duda el indicado por la cantidad de información de calidad que podemos leer.


La guía definitiva de Django "Desarrolla aplicaciones Web de forma rápida y sencilla" excelente material para complementar todas el conocimiento en Django.

En este libro van a encontrar:

PARTE 1 Comenzando con lo básico

  • CAPITULO 1 Introducción a Django
  • CAPITULO 2 Empezando
  • CAPITULO 3 Los principios de las páginas Web dinámicas
  • CAPITULO 4 Plantillas
  • CAPITULO 5 Modelos
  • CAPITULO 6 El sitio de Administración Django
  • CAPITULO 7 Formularios


PARTE 2 Nivel avanzado

  • CAPITULO 8 Vistas avanzadas y URLconfs
  • CAPITULO 9 Plantillas Avanzadas
  • CAPITULO 10 Modelos Avanzados
  • CAPITULO 11 Vistas Genéricas
  • CAPITULO 12 Desplegar Django


PARTE 3 Baterías incluidas

  • CAPITULO 13 Generación de contenido no HTML
  • CAPITULO 14 Sesiones, usuario e inscripciones
  • CAPITULO 15 Cache
  • CAPITULO 16 django.contrib
  • CAPITULO 17 Middleware
  • CAPITULO 18 Integración con Base de datos y Aplicaciones
  • CAPITULO 19 Internacionalización
  • CAPITULO 20 Seguridad
Saludos!

martes, 17 de noviembre de 2015

Mi primer proyecto en #Django

Todo indica que es el momento de comenzar a jugar con Django y las cosas que nos tiene preparado, dijimos que vamos a comenzar a trabajar en un entorno de tipo LAMP donde luego vamos a mostrar como desplegar una app completa de Django. Por el momento vamos por el principio.


Les comentaba que framework como Symfony2, RoR e incluso Django tienen funcionalidades de generador de código por medio del uso de sus comandos.

La primera organización en Django es la creación de un proyecto, es por ello que vamos a buscar algún directorio de trabajo para crear el proyecto.

Para obtener ayuda, vimos que lo podemos hacer de la siguiente forma:

$ django-admin help startproject

usage: django-admin startproject [-h] [--version] [-v {0,1,2,3}]
                                 [--settings SETTINGS]
                                 [--pythonpath PYTHONPATH] [--traceback]
                                 [--no-color] [--template TEMPLATE]
                                 [--extension EXTENSIONS] [--name FILES]
                                 name [directory]

Creates a Django project directory structure for the given project name in the
current directory or optionally in the given directory.

positional arguments:
  name                  Name of the application or project.
  directory             Optional destination directory

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on CommandError exceptions
  --no-color            Don't colorize the command output.
  --template TEMPLATE   The path or URL to load the template from.
  --extension EXTENSIONS, -e EXTENSIONS
                        The file extension(s) to render (default: "py").
                        Separate multiple extensions with commas, or use -e
                        multiple times.
  --name FILES, -n FILES
                        The file name(s) to render. Separate multiple
                        extensions with commas, or use -n multiple times.

De esta forma creamos nuestro primer proyecto con el nombre de elcodigok

$ django-admin startproject elcodigok -v 3

Rendering project template files with extensions: .py
Rendering project template files with filenames: 
Creating /home/dmaldonado/Proyectos/Django/elcodigok/manage.py
Creating /home/dmaldonado/Proyectos/Django/elcodigok/elcodigok/wsgi.py
Creating /home/dmaldonado/Proyectos/Django/elcodigok/elcodigok/settings.py
Creating /home/dmaldonado/Proyectos/Django/elcodigok/elcodigok/__init__.py
Creating /home/dmaldonado/Proyectos/Django/elcodigok/elcodigok/urls.py

Utilizamos el flag -v para activar el mayor modo verbose para conocer que es lo que está generando. Es así que crea un directorio con el nombre de nuestro proyecto y en el interior el siguiente arbol de directorio.

elcodigok
├───manage.py
└───elcodidok
        settings.py
        urls.py
        wsgi.py
        __init__.py

Anatomía de un proyecto en Django


  • manage.py es un script que ayuda con la administración del sitio. Con ello podremos iniciar un servidor web en nuestro ordenador sin necesidad de instalar nada más, entre otras cosas.
  • El archivo settings.py contiene la configuración de tu sitio web.
  • El archivo urls.py contiene una lista de los patrones utilizados por urlresolver.
  • Ignoremos los otros archivos por ahora - no los cambiaremos. ¡Lo único que debes recordar es no borrarlos por accidente!
Damos un paso más? gracias a la ayuda de manage.py podemos ejecutar nuestro servidor para desde el primer momento jugar con un servidor y esto de la siguiente manera:

$ ./manage.py runserver

Desde un navegador web tal y como o indica la salida del comando anterior podemos ingresar a la dirección http://127.0.0.1:8000/


Saludos!

lunes, 16 de noviembre de 2015

Novedades en Symfony

A pesar que comencé a estudiar algunas cosas con el framework Django como lo están leyendo en entradas anteriores, es prácticamente imposible dejar de lado todas las cosas que están pasando en Symfony.


Hoy nos encontramos con 2 novedades tal y como se estaba esperando, la publicación BETA-1 de las nuevas versiones 2.8.0-BETA1 y 3.0.0-BETA1

Haciendo un fuerte hincapié en la versión 2.8.0-BETA1 con la incorporación de nuevos componentes, mejoras en su gestor de vistas Twig, Inyección de dependencias, Seguridad, el rediseño del WebProfiler y un extenso listado de cambios que los puedes seguir desde aquí.


Por otro lado ya se encuentra disponible una guía de actualización, para saber si tu aplicación web creado con Symfony 2.7.x es compatible con Symfony 2.8 y todas las consideración a tener en cuenta.

Lo mismo pasa con la guía para ver la compatibilidad de Symfony 2.x a la versión Symfony 3.x

Mi recomendación es la siguiente: como vieron en el gráfico de Releases en Symfony las versiones 2.7 y 2.8 se van a extender hasta mediados y fines del 2018 un tiempo realmente extenso de soporte en esas versiones, es por ello que si ya tienen aplicaciones en producción sobre esas versiones a los sumo mi recomendación es pasarla a 2.8-FINAL pero con respecto a la versión 3.x además de que su tiempo va a ser muy corto para una aplicación "grande" podemos hacer varios laboratorios para ir aprendiendo las nuevas características y las cosas que va a traer de interesante.

Por esa razón, a revisar las compatibilidades de nuestros proyectos

miércoles, 11 de noviembre de 2015

#Django en la línea de comandos

Django al igual que otros frameworks como Ruby on Rails o Symfony2 generan código de forma automática y todo esto lo hacen gracias a sus herramientas en la línea de comandos. Maravilloso verdad?


Por ejemplo para tener nuestro primer acercamiento a los comandos de Django podemos escribir:

$ django-admin

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runfcgi
    runserver
    shell
    showmigrations
    sql
    sqlall
    sqlclear
    sqlcustom
    sqldropindexes
    sqlflush
    sqlindexes
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    syncdb
    test
    testserver
    validate

Mientas vallamos aprendiendo nuevas cosas dentro del framework, vamos a ir viendo todas, o por lo menos la mayoría de las opciones con las que cuenta Django.

En Symfony2, por ejemplo, sus comandos son bastantes similares y permiten la generación de proyecto, Bundle,  conexión con bases de datos, etc En Django a simple vista se puede ver que muchos sub-comandos tiene una funcionalidad similar a su nombre, que son muy descriptivos.

A los que utilizan servidores tipo UNIX quizás se ven más familiarizados a utilizar la línea de comandos, el secreto está simplemente en hacer uso e ir recordando poco a poco herramientas básicas para poder operar todo un sistema operativo desde allí.

Para obtener información adicional, lo primero que vamos a hacer es uso de help y eso se lo recomiendo siempre antes de ejecutarlo.

$ django-admin help

Veamos el siguiente ejemplo práctico:

$ django-admin help shell
usage: django-admin shell [-h] [--version] [-v {0,1,2,3}]
                          [--settings SETTINGS] [--pythonpath PYTHONPATH]
                          [--traceback] [--no-color] [--plain] [--no-startup]
                          [-i {ipython,bpython}]

Runs a Python interactive interpreter. Tries to use IPython or bpython, if one
of them is available.

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on CommandError exceptions
  --no-color            Don't colorize the command output.
  --plain               Tells Django to use plain Python, not IPython or
                        bpython.
  --no-startup          When using plain Python, ignore the PYTHONSTARTUP
                        environment variable and ~/.pythonrc.py script.
  -i {ipython,bpython}, --interface {ipython,bpython}
                        Specify an interactive interpreter interface.
                        Available options: "ipython" and "bpython"

De esta manera, podemos combinarlo de la siguiente forma

$ django-admin shell --version
1.8.6

Al principio, estoy seguro que a muchos le puede resultar algo confuso y por momentos difícil, pero es cuestión de acostumbrarse un poco y dar algo de práctica.

Saludos!

martes, 10 de noviembre de 2015

Instalar #Django

El siguiente paso para comenzar a jugar con Django es instalar el framework en un entorno de Desarrollo, que como en mi caso es un Kubuntu 15.10 publicado hace muy poquitos días.


Nada mejor que instalar un paquete en Python que hacerlo con la herramienta pip.

pip Es un sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python. Muchos paquetes pueden ser encontrados en el Índice de Paquete de la Python (PyPI). Python 2.7.9 y posteriores (en la serie python2), y Phyton 3.4 y posteriores incluyen pip (pip3 para Phyton3) por omisión.

Hacer uso de pip es sumamente simple, ya que nos permite buscar, instalar y desinstalar paquetes en Python resolviendo todas las dependencias necesarias.

$ pip search nombre-paquete

$ pip install nombre-paquete

$ pip uninstall nombre-paquete

Instalando Django


Lo más recomendable es utilizar pip para instalar Django, ya que nos va a permitir mantenerlo actualizado a la hora de desarrollar nuestros proyectos webs.

Con permisos de root podemos ejecutar el siguiente comando:

$ pip install Django 
Collecting Django
  Downloading Django-1.8.6-py2.py3-none-any.whl (6.2MB)
    100% |████████████████████████████████| 6.2MB 84kB/s 
Installing collected packages: Django
Successfully installed Django-1.8.6

Como se puede ver, pip se encargo de la descarga e instalación de Django en su versión estable 1.8.6, ahora les propongo verificar jugando con la consola de Python

$ python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print django.get_version()
1.8.6

Este es el momento en donde las primeras sonrisas comienzan a aparecer y nos preparamos para lo que va a venir.

Saludos!

lunes, 9 de noviembre de 2015

El Framework #Django

Luego de varias vueltas, decidí comenzar a estudiar en mis tiempos libres a Django un poco más en profundidad y aprovechar la oportunidad para compartir los primeros pasos con el framework.


En este último tiempo, como desarrollo web, utilicé Symfony2 como framework PHP5 y que estoy seguro que me va a servir de base para comprender no solamente el uso de algunos comandos dentro de Django sino también para comprender su modelo MVC y las diferentes capas.

Ahora bien, para comenzar a describir a Django de forma más técnica, se trata de un framework web de código abierto escrito en Python que permite construir aplicaciones web más rápido y con menos código.

Django fue inicialmente desarrollado para gestionar aplicaciones web de páginas orientadas a noticias de World Online, más tarde se liberó bajo licencia BSD. Django se centra en automatizar todo lo posible y se adhiere al principio DRY (Don't Repeat Yourself).

Otras características de Django son:

  • Un mapeador objeto-relacional.
  • Aplicaciones "enchufables" que pueden instalarse en cualquier página gestionada con Django.
  • Una API de base de datos robusta.
  • Un sistema incorporado de "vistas genéricas" que ahorra tener que escribir la lógica de ciertas tareas comunes.
  • Un sistema extensible de plantillas basado en etiquetas, con herencia de plantillas.
  • Un despachador de URLs basado en expresiones regulares.
  • Un sistema "middleware" para desarrollar características adicionales; por ejemplo, la distribución principal de Django incluye componentes middleware que proporcionan cacheo, compresión de la salida, normalización de URLs, protección CSRF y soporte de sesiones.
  • Soporte de internacionalización, incluyendo traducciones incorporadas de la interfaz de administración.
  • Documentación incorporada accesible a través de la aplicación administrativa (incluyendo documentación generada automáticamente de los modelos y las bibliotecas de plantillas añadidas por las aplicaciones).

Actualmente se encuentra en la versión estable Django 1.8.6 liberada en los primeros días de Noviembre de este año, corrigiendo algunos bugs de su versión anterior y dando soporte a Python 3.5

En las próximas entradas, seguramente van a estar relacionadas a Django y todo su ecosistema, desde la instalación básica como los primeros proyectos que se vallan creando.

Saludos!

Entradas populares