Django es el entorno de desarrollo web para perfeccionistas con límites de tiempo

Convenciones de aplicaciones reusables en Django

Este post es una traducción al español de Django reusable apps conventions, escrito por Eric Holscher. Trata de servir como punto de referencia sobre las mejores prácticas y convenciones en Django. También te pueden interesar las convenciones de proyecto en Django.

¿Qué es una aplicación reusable?

Una aplicación Django reusable es una aplicación que se puede añadir fácilmente a un proyecto y que ofrece una funcionalidad muy específica. Las aplicaciones reusables deberían centrarse en seguir la filosofía Unix de "haz una cosa y hazla bien". Hay más información sobre esto en la charla sobre aplicaciones reusables que dio James Bennett en la Djangocon.

¿Cómo puedo distribuir mi aplicación?

Django debería estar usando el Indice de Paquetes Python (también conocido como Pypi ó Cheese Shop). Hay un tutorial que explica cómo empaquetar y subir tu aplicación a Pypi. Todas las aplicaciones reusables deberían ser subidas a Pypi.

Si subes tu aplicación a Pypi generalmente es una buena idea utilizar el prefijo "django-" en el nombre del proyecto.

Ten también en cuenta que más abajo cuando nos referimos al lugar por omisión para algo como un archivo, esto significa que puedes hacer un directorio con ese mismo nombre como se hace normalmente en Python.

Modelos

URLs

  • Situadas en APP/urls.py (.py ó un directorio)
  • Deben tener un atributo name para que sean reversibles; por ejemplo un nombre siguiendo la nomenclatura APLICACION_MODELO_VISTA, por ejemplo blog_post_detail ó blog_post_list.

Vistas

  • Situadas en APP/views.py (.py ó un directorio)
  • Pueden ser cualquier función Python
  • Las vistas deben proveer valores por defecto fácilmente reemplazables. Por ejemplo:
def register(request, success_url=None,
    form_class=RegistrationForm
    template_name='registration/registration_form.html',
    extra_context=None):

Admin

  • No requerido
  • Situado en APP/admin.py
  • Clases Admin para un MODELO deben ser llamadas MODELOAdmin

Plantillas

  • Situadas en APP/templates/APP/template.html

En un esfuerzo por estandarizar el nombre de bloques en las plantillas de Django se proponen los siguientes bloques para uso común.

  • {% block title %}

    Éste será el bloque en el que definas el título de la página. Preferiblemente tu base.html definirá el nombre de tu sitio web (a lo mejor incluso utilizando el Sites framework) fuera de esta etiqueta para que aparezca en todas las páginas.

  • {% block extra_head %}

    Éste es uno que mucha gente ya está utilizando de una u otra forma. En tu plantilla base tienes cosas en <head> que son utilizadas para todas las demás. Sin embargo, muchas otras páginas necesitan incluir cosas distintas dentro de <head>, como feeds RSS, Javascript, CSS y otras cosas que deben ir en la cabecera. Probablemente necesitarás otros bloques especializados (como el title descrito anteriormente) que se encuentren en otras partes de <head>.

  • {% block body %}

    Esta etiqueta se pondrá englobando toda la sección <body> de la página. Esto te permite crear páginas en tu aplicación que reemplacen la página entera, no sólo el contenido. No la usarás mucho, pero es una etiqueta realmente útil cuando la necesitas. Se intenta mantener el nombre de las etiquetas de forma coherente con las etiquetas HTML cuando es posible.

  • {% block menu %}

    En este bloque deberá estar tu menú. Es donde se debe incluir la navegación general del sitio web, no una sub-navegación interna de una página.

  • {% block content %}

    Este es el lugar para definir el contenido de una página. Preferiblemente será lo que cambie en cada página. No incluirá ninguna navegación del sitio, cabeceras, pies de página, o nada que debiera pertenecer a una plantilla base.

Otros bloques posibles

  • {% block content_title %}

    Este bloque estará donde se encuentre el "título" de un bloque de contenido. También puede incluir algún tipo de navegación entre contenidos u otras cosas similares. Preferiblemente algo que no esté en el contenido de las páginas principales. (Sin embargo a lo mejor debería ir dentro de la etiqueta content y usar otra etiqueta main_content en vez de la etiqueta content propuesta anteriormente.)

  • {% block header %} {% block footer %}

    Para cualquier area de texto en la cabecera ó pie que pueda cambiar según la página.

  • {% block body_id %} {% block body_class %}

    Este bloque se usará para especificar los atributos class ó id de la etiqueta <body> del documento. Es útil especificarlo para el uso de estilos CSS y otras propiedades.

  • {% block [section]_menu %} {% block page_menu %}

    Este bloque sería el opuesto al bloque menu propuesto anteriormente. Debería ser un menú para una sección o página.

Documentación

  • Situada en un directorio docs en el mismo nivel que el directorio APP (claro está que para esto debes tener un directorio por encima de tu aplicación)
  • Puede contener plantillas de referencia

Forms

  • Situados en APP/forms.py

Template tags

  • Situados en APP/templatetags/APP_tags.py

Sintaxis propuesta para template tags

  • as (variable de contexto): Usado para poner una variable en el contexto de una página.
  • for (objeto o app.modelo): Usado para designar un objeto para una acción que debe ejecutar.
  • limit (número): Usado para limitar el resultado a un número concreto de resultados.
  • exclude (objeto o pk): Igual que for pero usado para excluir cosas de ese tipo.

Tests

  • Situados en APP/tests.py (.py ó un directorio)
  • Las fixtures se sitúan en APP/fixtures/fixture.json
  • Generalmente sobreescriben la clase Testcase de Django.

Middleware

  • Situados en APP/middleware.py
  • Los mínimos posibles

Context Processors

  • Situados en APP/context_processors.py

Managers

  • Situados en APP/managers.py

Feeds

  • Situados en APP/feeds.py

Publicado por Antonio Melé el Viernes 1 de Mayo de 2009 Compártelo: Facebook: Twitter: | Categorías: aplicaciones, convenciones

Entradas similares

Idiomas en nuestras URLs gracias a django-localeurl

django-localeurl es una aplicación que permite el uso de códigos de idiomas en las URLs de nuestro proyecto. Esto trae la ventaja de que ...


Ejecutar tareas automáticas con django-chronograph

Django-chronograph es una aplicación que permite programar la ejecución de tareas automáticas de manage.py utilizando cron. Permite especificar las tareas a realizar y ...


 
oEmbed y Django: incrusta contenidos de servicios web con django-oembed

oEmbed es un formato que permite usar una representación embebida de una URL en sitios web de terceros. La API de oEmbed permite a ...


Nuevo sitio web para django-thumbs

django-thumbs ya tiene nuevo sitio web: http://djangothumbnails.com. La versión 0.3 de django-thumbs funciona correctamente con la versión de desarrollo de Django ...


 
 

6 comentarios:

El Domingo 25 de Diciembre de 2011 Socorro dijo:
Some time ago, I needed to buy a good house for my business but I didn't have enough money and could not purchase something. Thank heaven my dude proposed to try to get the credit loans at trustworthy bank. Thus, I acted so and used to be happy with my financial loan.
El Viernes 30 de Diciembre de 2011 Cristina dijo:
Even if you're completely new to the Internet commerce but really want to take your online business to greater heights, you will have to utilize the social bookmarking service.
El Miércoles 4 de Enero de 2012 Emilia dijo:
With the goal to prevent the errors in some masters thesis, that should be much better to buy the perfectly done article related to this good topic in the dissertation service in Internet. That is easier to reach the academic success taking that way.
El Miércoles 4 de Enero de 2012 Elnora dijo:
People want to reach a doctoral degree, but what is the correct way to do this? We can suggest to find for the thesis writing service to purchase the thesis pdf related to this good topic from. We took it and got really good grade.
El Martes 17 de Enero de 2012 Alec Jones dijo:
I don't know how to say this, so I'm just going to blurt it out: identifying unknown phone numbers involves consulting a good cell phone lookup directory.
El Viernes 3 de Febrero de 2012 Opal dijo:
The role of our professional url submission directory service is great website traffic increasing, turning a lot of visitors into leads and buying and researching correct keys for your internet site!

Escribe un comentario: