Django 2. Antonio Melé
Чтение книги онлайн.
Читать онлайн книгу Django 2 - Antonio Melé страница 17
La validación de campos depende del tipo de campo definido. Por ejemplo, los campos email y to son campos del tipo EmailField. Ambos campos requieren una dirección válida de correo electrónico; en caso contrario, la validación de campos provocará una excepción de tipo forms.ValidationError y el formulario no podrá ser validado. Otros parámetros se tienen en cuenta a la hora de realizar la validación: hay un número máximo de caracteres definidos en el campo name, y también se especifica que el campo comments no es obligatorio. Todos estos parámetros se tienen en cuenta a la hora de realizar las validaciones. El tipo de campos que ha usado son solo una pequeña muestra de los que Django dispone. Puede encontrar información sobre todos los campos de formulario disponibles en https://docs.djangoproject.com/en/2.0/ref/forms/fields/.
Usar formularios en vistas
Ahora va a crear una nueva vista que gestione el formulario y el envío de email, siempre y cuando contenga información válida. Para ello editará el fichero views.py de la aplicación blog y añadirá el siguiente contenido:
Esta vista funciona del siguiente modo:
• Se define una vista llamada post_share que recibe un objeto request y un parámetro post_id.
• Haciendo uso del atajo get_object_or_404() se recupera el artículo por identificador y por estado published.
• Usará la misma vista para visualizar el formulario inicial y procesar la información enviada. Se identifica si el formulario ha sido enviado mediante el atributo method del objeto request. El formulario se envía por el método POST. Si se recibe una solicitud GET, se genera un formulario vacío. Si se recibe una petición POST, se debe procesar la información del formulario. Por este motivo, utilizará la sentencia condicional request.method == 'POST' para distinguir entre ambos escenarios.
Los siguientes pasos corresponden al procesamiento del formulario:
1. Cuando la vista se carga inicialmente con una solicitud GET, se crea una nueva instancia de formulario que se mostrará vacía en la plantilla HTML.
2. El usuario rellena el formulario y lo envía por método POST. En ese momento, se crea una instancia de formulario con los datos enviados contenidos en request.POST:
3. Después de esto se validan los datos enviados usando el método is_valid() del formulario. Este método validará la información introducida en el formulario y devolverá True si todos los campos contienen datos válidos. Si al menos uno de los campos no hubiera podido validarse, el método devolverá False. A partir de entonces, la lista de errores de validación estará accesible en form.errors.
4. Si el formulario no es válido, se renderizará la plantilla de nuevo, con la información enviada, mostrando un mensaje de error en las validaciones que hubiesen fallado.
5. Si el formulario es válido, se recuperarán los datos validados a través de form.claened_data. Este atributo es de tipo diccionario, donde las claves son los nombres de los campos del formulario.
A continuación se describe cómo se envían correos electrónicos con Django para completar la funcionalidad.
Enviar emails con Django
Enviar emails con Django es una acción muy directa. Primero hay que disponer de un servidor SMTP local o definir uno externo en la configuración, incluyendo la siguiente información en el fichero de configuración settigns.py del proyecto:
• EMAIL_HOST es el nombre donde se aloja el servidor SMTP. Por defecto es localhost.
• EMAIL_PORT es el puerto del SMTP. Por defecto es 25.
• EMAIL_HOST_USER es el usuario del servidor SMTP.
• EMAIL_HOST_PASSWORD es la contraseña de usuario del servidor SMTP.
• EMAIL_USE_TLS indica si debe usar la conexión segura sobre TLS.
• EMAIL_USE_SSL indica si usar una conexión TLS implícita.
Si no dispone de un servidor SMTP, puede indicar a Django que escriba los emails en la consola, a través de la siguiente línea en la configuración:
Con esta configuración, Django escribirá todos los emails a través del intérprete. Esta opción es útil para tareas de validación de la aplicación sin disponer de un servidor SMTP.
Si lo que quiere es enviar emails, pero no dispone de un servidor SMTP local, puede usar la configuración del servidor SMTP del proveedor de servicio de email. Por ejemplo, la siguiente configuración es válida para enviar correos electrónicos a través de los servidores de Gmail con una cuenta de Google:
Ejecute el comando python manage.py shell para abrir un intérprete de Python y enviar un email del siguiente modo:
La función send_mail() recoge el asunto, el mensaje, el remitente y una lista de los destinatarios como argumentos necesarios. Entre los argumentos opcionales existe fail_silently=False, que permite no elevar excepciones en caso de no poder mandar correctamente el email. Como salida se obtiene el número de emails enviados correctamente, por lo que si la salida obtenida es 1, entonces el email ha sido enviado.
Si envía emails con Gmail con la configuración anterior, hay que tener en cuenta activar el acceso para aplicaciones menos seguras en https://myaccount.google.com/lesssecureapps del siguiente modo:
Ahora, va a incorporar la funcionalidad dentro de la vista.
Para ello va a editar la vista post_share en el fichero views.py de la aplicación de blog:
Ha declarado una variable sent y la ha inicializado