Creación de una web de empresa con Django (Parte 3)

  • por javier
  • 22 de Marzo de 2023

Hola de nuevo, aquí estamos con la tercera y última parte de nuestro pequeño "howto" ejemplo de Django. Si no entendeis algo, es normal si no habeis consultado el manual de Django previamente. Se necesita una base de Django para entender el artículo. Me habría gustado encontrar algo así cuando comencé mis andanzas con Django, por eso lo escribí. El manual de Django lo podeis consultar aqui: https://docs.djangoproject.com/en/1.5/ Hay hasta un .pdf que podeis descargar para más fácil consulta.

Bueno, tras éste preámbulo, vamos a pasar a lo que nos ocupa.

def contacto(request):
    email_ok=False
    error=consulta=empresa=contacto=""
    frm=FormCliente()
    if request.method=="POST":
        frm=FormCliente(request.POST)
        if frm.is_valid():
            empresa=frm.cleaned_data[''empresa'']
            contacto=frm.cleaned_data[''contacto'']
            direccion=frm.cleaned_data[''direccion'']
            localidad=frm.cleaned_data[''localidad'']
            pais=frm.cleaned_data[''pais'']
            email=frm.cleaned_data[''email'']
            telefono=frm.cleaned_data[''telefono'']
            consulta=frm.cleaned_data[''consulta'']
            message="%s (%s)\\nEn %s (%s, %s)\\n\\nConsulta: %s\\n\\n (%s)%s\\n\\n" 
            message=message % (empresa, email, direccion, localidad, pais, 
                               consulta, contacto, telefono)
            try:
                #send_mail("%s solicita informacion" % empresa, message, email, [''[email protected]''])
            except BadHeaderError:
                error=''Error en la cabecera del mensaje.''
            email_ok=True
        else:
            error="Datos incorrectos, revise y reintente."
    return render(request, "contacto.html", {''form'':frm, 
                                             ''ok'':email_ok, "error":error, 
                                             "consulta":consulta, 						     "contacto":contacto, 
                                             "empresa":empresa})

La función quienes es trivial, por lo cual no la explico. En cuanto a la funcion contacto podemos ver que para empezar, inicializamos unas cuantas variables. Posteriormente, instanciamos el formulario FormCliente, el cual contiene la definición de los campos de entrada correspondientes a Cliente (model.py). En el primer if, comprobamos que el tipo de petición es POST. Si es así, reinstanciamos el formulario FormCliente, pero ésta vez le pasamos los datos de la petición POST para después verificar mediante .is_valid() la corrección de las restricciones que aplicamos en FormCliente. Como veis, si es todo correcto, extraemos del formulario los datos pertinentes, generamos el mensaje que enviaremos por email con la funcion send_mail. En éste caso comprobamos la cabecera del mensaje como medida de seguridad. Podeis ver que usamos algunas variables auxiliares como email_ok o error, que en las templates utilizaremos para mostrar un texto u otro diferente. El formato de render contiene 3 parámetros en éste caso: request (datos sobre la peticion, datos de sesion, cookies, etc..), "contacto.html" es el nombre del archivo dentro de /templates/ que Django enviará al navegador para su renderizado. Esta cadena permite añadir rutas relativas a /templates/. Un ejemplo sería "otrapp/page1.html". En éste caso la ruta [..]/templates/otraapp/ deberia existir conteniendo el archivo page1.html.

Como muestra de template, vamos a ver la de contacto.html.

<main.html> <title></title> <link href="/st/css/style.css" rel="stylesheet"> <link href="/st/css/menu.css" rel="stylesheet">{% block css %} {% endblock %} {% block js %} {% endblock %}</main.html>

{% block header %} {% endblock %}
{% block section %} {% endblock %}
{% block footer %} {% endblock %}
<contacto.html> {% extends "main.html" %} {% block title %}Contactar{% endblock %} {% block header %}

Contacto

{% endblock %} {% block menu %} {% endblock %} {% block section %}
{% if ok %} {{ contacto }}, Lorem ipsum dolor sit amet {% else %}

Lorem ipsum dolor sit amet

{% csrf_token %} {{ form.as_table }}
  {{ error }}
{% endif %}
{% endblock %} {% block footer %} {% endblock %}

 

El archivo contacto.html comienza con {% extends "main.html" %}. Las {% %} indican un comando de template. En éste caso es extends "main.html". main.html contiene una definición de archivo html con blocks (bloques) definidos, que se reemplazarán en el archivo que extiende el archivo principal (contacto.html), mediante redefiniciones de dichos bloques. Por ejemplo el block title, situará la palabra contactar en el título (ver el tag title de main.html).

Tras algunas redefiniciones nos encontramos con {{ contacto }} dentro de un {% if ok %}{% endif %}. contacto es una variable que queremos mostrar y ok está en la parte de la condición del if, en éste caso si se evalúa a True, se ejecuta y muestra la parte interna del if. Caso contrario, se ejecuta el else. csrf_token implementa una medida de seguridad que se utiliza por defecto en los formularios Django y form.as_table muestra dentro de una tabla el formulario definido en la variable form que pasamos desde la funcion contacto. El resto está definido como un formulario normal de tipo POST, sin ajax de ningun tipo. Se podría implementar con ajax también pero para el ejemplo considero la simpleza algo importante.

En las templates existen varias funcionalidades más como por ejemplo la implementación de filtros, que hacen muy potente el sistema de templates de Django.

En cuanto al formulario del que hablamos antes, decir que se explica por si mismo. En éste caso, es una clase que extiende a forms.Form (formulario base) al que añadimos varias propiedades de tipo caracter o email, con campos requeridos y longitudes diversas. Existen muchos más parámetros que podemos pasar a las diferentes clases que integran los tipos de datos en django.forms. Os remito al manual para que sigais investigando sobre éstos tipos de datos o cualquier ampliación del tema. El manual es claro y extenso, muy completo e imprescindible seguirlo de principio a fin.

from django import forms

class FormCliente(forms.Form):
    empresa=forms.CharField(required=True,max_length=45)
    contacto=forms.CharField(required=True,max_length=65)
    direccion=forms.CharField(required=True,max_length=220)
    localidad=forms.CharField(required=True,max_length=55)
    pais=forms.CharField(required=True,max_length=55)
    telefono=forms.CharField(required=True,max_length=19)
    email=forms.EmailField(required=True,max_length=45)
    consulta=forms.CharField(required=True,max_length=690)

Nada más por hoy. Finalizamos así la serie de 3 artículos sobre Django. Si teneis dudas o consultas, no dudeis en dejar un mensaje debajo.

Para ver como quedará nuestra página, podeis acceder a ésta url http://djangoweb.tuxrincon.com. El código está aquí empresa.zip

Gracias por la lectura y os deseo una feliz andadura con éste framework. Saludos.

</contacto.html>
blog comments powered by Disqus

Triggers con Django en el modelo de datos

  • por javier
  • 22 de Marzo de 2023

Triggers con Django en el modelo de datos

Me imagino que estareis disfrutando de unas merecidas vacaciones, no obstante, quiero ofreceros un nuevo artículo sobre Django. Noo no es un quick n dirty, jeje Se trata de un ejemplo de como implementar triggers en Django y su ORM. Para la realización de ésta tarea, tenemos varias opciones:

Creación de una web de empresa con Django (Parte 3)

  • por javier
  • 22 de Marzo de 2023

Hola de nuevo, aquí estamos con la tercera y última parte de nuestro pequeño "howto" ejemplo de Django. Si no entendeis algo, es normal si no habeis consultado el manual de Django previamente. Se necesita una base de Django para entender el artículo. Me habría gustado encontrar algo así cuando comencé mis andanzas con Django, por eso lo escribí. El manual de Django lo podeis consultar aqui: https://docs.djangoproject.com/en/1.5/ Hay hasta un .pdf que podeis descargar para más fácil consulta.

Creación de una web de empresa con Django (Parte 2)

  • por javier
  • 22 de Marzo de 2023

En el anterior artículo, vimos como configurar correctamente Django antes de meternos a programar nada. En éste capítulo veremos como crear una aplicacion sencilla con Django. Algo muy básico. Se trata de una web con la siguiente estructura:

  • Servicios. Servicios prestados por la empresa
  • Productos. Productos que ofrece
  • Quienes Somos. Datos sobre la empresa
  • Contacto. Formulario de contacto de la empresa

Creación de una web de empresa con Django (Parte 1)

  • por javier
  • 22 de Marzo de 2023

Introducción

Django es un framework para aplicaciones web en lenguaje de programación Python. El principio DRY (Dont Repeat Yourself) es una de las bases de dicho framework y consiste en no repetir código similar en ninguna de las partes de ningún proyecto. Django provee una potencia sin igual en el desarrollo web y se está abriendo mercado a pasos agigantados. Es muy común ver como muchas startups se programan con éste framework. Su potencia radica en que con poco código, podremos hacer muchas cosas comparado, por ejemplo con muchos frameworks php y es bastante rápido. Además no carga demasiado la máquina. Su desempeño es superior a PHP, en mi opinión.

Uso del ORM de Django en tus programas CUI/GUI

  • por javier
  • 21 de Marzo de 2023

Señores, SQL, en mi opinión, ha muerto. O a lo sumo, queda como capa subyacente de los muchos sistemas de Mapeo Objeto-Relacionales. Es obvio que el modelado de la base de datos, desde el punto de vista de Análisis, sigue siendo similar, pero desde el punto de vista del desarrollador, --de un tiempo a esta parte--, nos encontramos con que todos los Frameworks que se precien y utilicen Sistemas Gestores de Bases de Datos Relacionales o Híbridos incluso, en la capa Modelo, (Ver modelo de 3 capas), utilizan ORM (Mapeo Objeto-Relacional) como nuevo interfaz dentro del lenguaje de programación y/o Framework elegido.

Update cookies preferences