viernes, 15 de marzo de 2019

☛ Descuento hasta 95% en todo Marzo. USD 9.99 ó menos ⏳ 🏆🏆🏆🏆🏆




Hasta el 31 de Marzo estará activado el cupón MARZO2019 con el que podrás inscribirte a cualquiera de los cursos listados a continuación. 

Cupones limitados.

El cupón es de hasta el 95% de descuento, para que quede a USD 9.99 ó menos, según el valor menor para tu país que me permite la plataforma de Udemy.

1. Crea RestFul Api con Python usando Django Rest FrameWork  90% Descuento
https://www.udemy.com/restful-api-con-python-usando-django-rest-framework/?couponCode=MARZO2019




2. Desarrollo Web con Python usando Django FrameWork (95% Descuento)
https://www.udemy.com/django-practico/?couponCode=MARZO2019





3. Domina el ORM de Django  (60% Descuento)
https://www.udemy.com/domina-el-orm-de-django/?couponCode=MARZO2019




4. Replicación de Base de Datos con SymmetricDS (90% Descuento)
https://www.udemy.com/replicacion-de-base-de-datos-con-symmetricds/?couponCode=MARZO2019




5. Programación en Capas Web y Escritorio con ADO.NET  (90% Descuento)
https://www.udemy.com/debs-programacion-en-capas-full/?couponCode=MARZO2019




7. Entity FrameWorks para Principiantes  (50% Descuento)
https://www.udemy.com/iniciando-con-entity-framework/?couponCode=MARZO2019




8. El más nuevo Construye WebApi con ASP Net Core y Visual Studio Code
http://bit.ly/web-api-marzo-2019




¡No dejes pasar esta oportunidad de certificarte a $9,99 dólares, recuerda que es hasta el 31 de Marzo!



Feliz semana.

jueves, 14 de marzo de 2019

Json Web Token en Django Rest FrameWork - La forma fácil

#jwt  #drf  #auth #django #rest #framework #JsonWebToken #Token #python #Udemy #course #free #class

JWT, el acrónimo (en inglés) de Json Web Token, es una estrategia de autenticacón usada para aplicaciones CLIENTE/SERVIDOR donde el cliente es una aplicación web que usa Django, JavaScript o algún otro framework para front end como React, Angular, VueJS, etc.

En este tutorial voy a tratar de explicar la forma más fácil de implementar la autenticación JWT en un RestFul Api hecho con Django Rest FrameWork (DRF).  Menciono la manera fácil, porque hay otra forma (lo hablaré en una clase extra del curso) un poco más compleja.  Con lo que veremos en este tutorial, bien podrás implementar JWT en tu proyecto DRF.

Aclaraciones


  • Para las consultas o peticiones al ENDPOINT del API, estaré usando CURL
  • El proyecto a trabajar forma parte de lo que se ha hecho en el curso RestFul API con Python usando Django Rest FrameWork.  Este tutorial cubre la implementación de JWT para dicho proyecto.
  • Se asume que estás trabajando con un entorno virtual activado, así la instalación se realizará únicamente en dicho entorno virtual.
  • Será la forma fácil, porque usaremos la librería djangorestframework_simplejwt.

¿Cómo funciona JWT?

JWT es sólo un token de autorización que debe agregarse en el encabezado de todas las peticiones, para las cuales se requiere mostrar el recurso para usuarios autorizados.

El encabezado para enviar el token, debería verse algo así:

 curl http://127.0.0.1:8000/api/v1/productos/ -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTUyNTkyMzc3LCJqdGkiOiJiNTM0NWYzNTU5Yjc0ZDlmODM3YjBhMWIyN2NiYjk3NSIsInVzZXJfaWQiOjJ9.s3w6Li6usWzY7XM5W80jG2zwbVHsf73fgYM9kt8Fz10"  

Como vemos en el encabezado se envía Autorization y el tipo de token a enviar es Bearer.

El JWT se adquiere luego de autenticarse en el api al cual se le envío el usuario y la contraseña, esto regresará el access token y el refresh token.

El access token por lo general tiene una vida corta (expira por lo general en 5 minutos, podría ser configurable).

El refresh token, vive un poco más (24 horas, igual se podría configurar).  Se puede comparar con la autenticación por sesión.  Luego que éste expiere, el usuario deberá realizar un full login nuevamente.

Instalación y Configuración

Para instalar, debemo ejecutar desde la consola


 pip install djangorestframework_simplejwt  

Luego debemos de realizar la siguiente configuración

settings.py

 REST_FRAMEWORK = {  
   'DEFAULT_AUTHENTICATION_CLASSES': [  
     'rest_framework_simplejwt.authentication.JWTAuthentication',  
   ],  
 } 

urls.py 

La librería seleccionada, tiene la ventaja que ya trae vistas para autenticarse y para refrescar el token, a como podemos ver en el contenido de las rutas.


 from rest_framework_simplejwt import views as jwt_views  
 .  
 .  
 .  
 path('v5/token',jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'),  
 path('v5/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'), 

Probando aplicación

Para probar, vamos a usar la vista de listar productos del curso.

 class ProductoList(generics.ListCreateAPIView):  
   queryset = Producto.objects.all()  
   serializer_class = ProductoSerializer  


que tiene la ruta


 path('v1/productos/',ProductoList.as_view(), name='producto_list'),  

Primero que todo debemos autenticarnos, con la librería seleccionada tiene la particularidad que sólo invoquemos la vista TokenObtainPairView establecidad en el archivo de rutas bajo la url /api/v5/token y sólo le pasaremos como cabecera el username y el password, por eso es la forma fácil.

le pasaré el usuario daniel.bojorge y la clave 1234567.



 curl -X POST http://127.0.0.1:8000/api/v5/token -d "username=daniel.bojorge&password=1234567."  

Lo que devuelve algo así:


 {  
  "refresh":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU1MjY4MjkyNywianRpIjoiMTA0ODlkNjdmZWQ5NDFkYzlhNWRlMmY4ZTg2OTFiNmUiLCJ1c2VyX2lkIjoyfQ.kDSm6ULrW5c5BCb1TisVVH440FnDwfbT3MiANlCMM0Y",  
  "access":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTUyNTk2ODI3LCJqdGkiOiI4N2U3NTMxMGUyMzY0ZDc5OTliYjU2NWNmNjRlZjcwOSIsInVzZXJfaWQiOjJ9._rRyKZhwmIuQIz9ks_STq8Z7t5cqz8VpPfAMjvaOm7Q"  
 }  

Ya la librería trae la opción de autenticarse, por tanto sólo requiere que se tenga creado el usuario.

Para poder hacer alguna consulta, se debe agregar en la cabecera el access token


 curl http://127.0.0.1:8000/api/v1/productos/ -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTUyNTk2ODI3LCJqdGkiOiI4N2U3NTMxMGUyMzY0ZDc5OTliYjU2NWNmNjRlZjcwOSIsInVzZXJfaWQiOjJ9._rRyKZhwmIuQIz9ks_STq8Z7t5cqz8VpPfAMjvaOm7Q"  



Lo que eventualmente devolverá la respuesta solicitada.


 [{"id":7,"descripcion":"Desarrollo Web con Python usando Django","fecha_creado":"2018-10-01T12:11:37.090335Z","vendido":false,"subcategoria":1},{"id":8,"descripcion":"Replicacion de Base de Datos con SymmetricDS","fecha_creado":"2018-11-01T12:11:37.090335Z","vendido":false,"subcategoria":2},{"id":9,"descripcion":"Desarrollo de Aplicaciones en Capas","fecha_creado":"2017-08-01T12:11:37.090335Z","vendido":false,"subcategoria":3},{"id":10,"descripcion":"Domina ORM de Django","fecha_creado":"2019-01-04T12:11:37.090335Z","vendido":false,"subcategoria":4},{"id":11,"descripcion":"Introducción a Entity FrameWork","fecha_creado":"2017-08-05T12:11:37.090335Z","vendido":false,"subcategoria":4},{"id":12,"descripcion":"Álgebra Baldor","fecha_creado":"2015-05-05T12:11:37.090335Z","vendido":false,"subcategoria":5},{"id":14,"descripcion":"Poemas","fecha_creado":"1988-01-01T16:00:00Z","vendido":true,"subcategoria":5},{"id":15,"descripcion":"Nuevo de Azul","fecha_creado":"1988-01-01T16:00:00Z","vendido":true,"subcategoria":5},{"id":13,"descripcion":"Nuevo de Azul nuevo","fecha_creado":"1988-01-01T16:00:00Z","vendido":true,"subcategoria":5}]  

Si pasan 5 minutos, la respuesta será de token inválido


 {"detail":"Given token not valid for any token type","code":"token_not_valid","messages":[{"token_class":"AccessToken","token_type":"access","message":"Token is invalid or expired"}]}  


Si tratan de invocar el api con un token incorrecto, tendrán la respuesta con algo así:


 {"detail":"Given token not valid for any token type","code":"token_not_valid","messages":[{"token_class":"AccessToken","token_type":"access","message":"Token has wrong type"}]}  



Y si tratan de invocar sin ningún token.



Bueno y así rápidamente vimos cómo es fácil implementar JWT con Django Rest FrameWork.    Espero que este artículo te sea de utilidad

Si tienes interés en el curso, te dejo este enlace para que lo examines y si te inscribes con este enlace, obtendrás un cupón del 90%



lunes, 11 de marzo de 2019

Django: Importar Registros desde Excel

#Import #Data #Django #Python 


En esta ocasión veremos cómo importar datos desde un archivo en excel.  Usaremos la librería django-import-export y como su nombre lo indica, es una librería para manejar la importación/exportación de datos.

Esta librería soporta muchos formatos, incluídos xls,csv, json, yaml y otros formatos soportados por tablib.  También tiene una integración con el admin de django.

Para tal caso, tomaremos el código fuente del curso de Desarrollo Web con Python usando Django, pero crearemos una nueva aplicación.


 manage.py startapp export  

Y de acá, asumimos que ya has agregado en el Settings.py.  Si tienes dudas, puedes ver en curso anteriomente mostrado haciendo click en este enlace.

Instalar Librería

 pip install django-import-export  

Y actualizamos el archivo de configuración agregándole la nueva librería

 'import_export',  

Adicionalmente, debemos agregar una configuración que permita que la importación se haga usando transacciones de la base de datos.

 IMPORT_EXPORT_USE_TRANSACTIONS = True  

Recursos

La librería django-import-export trabaja con el concepto de Recurso, el cual es definición de clases muy similiar a como Django maneja los modelos de formularios y las clases admin.

Crearemos un modelo, el cual será donde se suba toda la información importada del archivo excel.

 #models.py  
 from django.db import models  
 class Persona(models.Model):  
   nombre = models.CharField(max_length=30)  
   email = models.EmailField(blank=True)  
   fecha_nac = models.DateField()  
   ciudad = models.CharField(max_length=100, blank=True)  

Se creará un archivo resource.py donde estará toda la lógica de la librería.
 #resources.py  
 from import_export import resources  
 from .models import Persona  
 class PersonaResource(resources.ModelResource):  
   class Meta:  
     model = Persona  

Esta es la definición más sencilla.  Puedes pasarle diferentes configuraciones a la clase Meta,
como fields, exclude, etc.  Puedes ver la documentación para más detalles

Importando Datos


Tomemos como ejemplo, el archivo xls siguiente


El Id debe estar presente porque es su llave primaria.  Como será generado, no es necesario que se especifique.

Ahora crearemos la plantilla, le pondremos por nombre export/importar.html.

 {% extends 'base/base.html' %}  
 {% block contenido %}  
  <form method="post" enctype="multipart/form-data">  
   {% csrf_token %}  
   <input type="file" name="xlsfile">  
   <button type="submit">Subir</button>  
  </form>  
 {% endblock %}  

Vista

from tablib import Dataset 
 
 def importar(request):  
   #template = loader.get_template('export/importar.html')  
   if request.method == 'POST':  
     persona_resource = PersonaResource()  
     dataset = Dataset()  
     #print(dataset)  
     nuevas_personas = request.FILES['xlsfile']  
     #print(nuevas_personas)  
     imported_data = dataset.load(nuevas_personas.read())  
     #print(dataset)  
     result = persona_resource.import_data(dataset, dry_run=True) # Test the data import  
     #print(result.has_errors())  
     if not result.has_errors():  
       persona_resource.import_data(dataset, dry_run=False) # Actually import now  
   return render(request, 'export/importar.html')  

He dejado comentado algunos prints, que te serían muy interesante ver qué va pasando por ahí.

Probando

Debemos hacer las migraciones necesarias para que se cree el modelo en la base de datos y aplicarla.  Luego de eso, debemos levantar el servidor.  Y accedemos, sabemos que todo va bien si el log está "limpio" y la aplicación se carga en el login.


Creé una ruta (en el archivo urls.py de la app), /export/import

from django.urls import path

from .views import importar

urlpatterns = [
path('import', importar , name='import'),
]

Luego de las credenciales (que no sería necesario especificarla), accedo a la ruta  http://127.0.0.1:8000/export/import.



Ahí cargo el archivo excel.


Y al presionar el botón subir, todo sucederá bastante rápido, ahí voy a revisar la tabla y esto es lo que encuentro.


Sólo teniendo cuidado que las fechas no las formatee Excel, en mi caso yo les antepuse una comilla simple para que siguiera en formato de texto.

Si te ha sido de utilidad este tutorial, te pediría lo compartas con tus amigos, conocidos y farmiliares.

Si estás interesado en aprender más, puedes inscribirte en el curso de Desarrollo Web con Python usando Django o ver alguno de los cursos para crecer como experto en desarrollo web con django viendo el siguiente enlace.

Bueno, será para la próxima.

sábado, 9 de marzo de 2019

1,500 Suscriptores en Youtube, celebremos activando un curso gratis



#Suscriptores #Youtube #Celebrar #Curso #Gratis #SPA #AngularJS #PHP #PostgreSQL

Así como ven el título, llegamos a los 1,500 suscriptores y para celebrarlo hice este video, denle like para poder hacer efectivo el premio.


Django - Revisar Permisos de Usuario desde el Template

#Clase #Gratis #Curso #Web #Python #Django #Permisos #Template

En esta ocasión les dejo una clase extra y gratuita del curso de Desarrollo Web con Python usando Django.

Veremos cómo poder revisar los permisos del usuario desde la plantilla, esto es desde el FrontEnd.


Puedes inscribirte en el curso haciendo click en el siguiente botón con un descuento del 95%, para dejarlo al precio más bajo asignado para tu país.
 95% Descuento

domingo, 3 de marzo de 2019

Cupones Gratis Curso RestFul Api con Python usando DRF


#Udemy #UdemyFreeCourse #FreeCoupon #Python #RestFul #DRF #Django #Rest #FrameWork

La dinámica es la siguiente, si logras obtener el curso y dejar una valoración de 5 estrellas, automáticamente te habrás ganado un cupón para el próximo curso que saldrá muy pronto.



Gracias por apoyar con tu reseña.

Si no has alcanzado, te dejo este cupón por un precio muy bajo (el más bajo que permite la plataforma para tu país) haciendo click sobre este enlace http://bit.ly/RestFulDjango022019

Para ver si aún hay cupones (porque son limitados), debes dar click en el siguiente botón y compartir en alguna de las redes sociales.


jueves, 28 de febrero de 2019

Python Tips: Probar banderas de una sola vez con Python

http://bit.ly/2X7KxRe
#python #tips #minitutoriales 

Una forma de validar banderas de una sola vez en python.

http://bit.ly/2X7KxRe
 


Recuerda los cursos disponibles acá:  http://bit.ly/blog-6-cursos

Artículos y Tutoriales sobre Python


#Tutoriales #Python #Tip #Teach @debsconsultores #django #flask

Hola a todos.  Este post es para anunciarles que a partir de hoy estaré publicando periódicamente un artículo sobre python o django o similares.

Trataré que sea unas dos veces por semana, iniciaré con un mini curso de python, así que estén atentos, suscríbanse al blog y así pueden seguir el hilo.

El primer tópico que trataremos mañana será sobre la instalación de python.

Los espero y ya saben, suscríbanse en el pop up que sale o en este formulario.



Suscríbete a la lista de correo

* indicates required

domingo, 24 de febrero de 2019

Cupones Gratis para Curso Desarrollo Web con Python usando Django


#Curso #Udemy #Desarrollo #Web con #Python usando #Django

Si tomas este curso, te pido dejes una reseña a más tardar el día 27/02/2019, ese día publicaré cupones gratis de mi más reciente curso.


Si no has logrado alcanzar un cupón, aún puedes optar por éste y cualquiera de los otros cursos al precio más bajo que puedo dejar para tu país.  Promoción finaliza 28/02/2019

Haz click acá para ver los cursos con descuento de hasta 95%

Para aplicar al cupón gratis (cupones limitados en tiempo y cantidad) debes dara click en el siguiente botón.

Recuerda suscribirte a la lista de correo si estás interesado en nuevas promociones y super descuentos.  Cuando salga el nuevo curso, a la lista enviaré cupón de descuento, en los demás lugares está a un precio mucho mayor.

jueves, 14 de febrero de 2019

Manejo de usuarios en PostgreSQL


#Create #User #PostgreSQL #DataBase #psql #createuser

En esta ocasión, como preparación para el curso de Administración de PostgreSQL (próximamente) veremos cómo crear un usuario para este excelente gestor de base de datos.

Utilizaremos dos formas de crear el usuario, trataré de mostrar las diferentes opciones (que conozco, pueda que existan más).

Además de crear el usuario, veremos cómo asignarle permisos y crear la base de datos.

En los cursos que he hecho, por lo menos en el de Desarrollo Web con Python usando DjangoDomina el ORM de Django y RestFul API con Python y Django RestFrameWork, hemos visto cómo crear la base de datos, pero cómo esos cursos no tratan meramente de PostgreSQL, por acá iniciaré una serie de cursos donde iré dando detalles.

Primero que todo debemos tener PostgreSQL instalado, en Windows el proceso es sencillo, en linux anteriormente había hecho un video explicando cómo instalarlo en este artículo.

Para todos los ejemplos, se está corriendo un servidor con PostgreSQL 10 corriendo sobre el puerto 5432 (a menos que se indique lo contrario)

Operaciones con Usuario desde la terminal de PostgreSQL (psql)

Crear Usuario

Accedemos a la consola con el comando psql y el usuario postgres
Una vez dentro, ejecutamos la creacicón del usuario con un comando DML
CREATE USER prueba1 PASSWORD '123456';


Si deseamos eliminar el usuario lo haremos con el comando DROP USER prueba1;



Cambiar Contraseña

El comando \password de psql, nos permite cambiar la contraseña de un usuario activo, la ventaja de este comando es que la escritura es silent, por lo que no exponemos la contraseña al escribirla.

Vamos a acceder con el usuario prueba1 y luego cambiaremos su contraseña por 654321, para acceder con el usuario, debemos especificar una base de datos, esta será postgres.



El comando \password pedirá la nueva contraseña del usuario activo y luego confirmación de la contraseña y ya con esto el usuario tiene nueva contraseña.

Para cambiar la contraseña de otro usuario, lo haremos con la instrucción DML ALTER ROLE o ALTER USER.




Crear Usuario con el comando createuser de PostgreSQL


La herramienta de línea de comandos createuser, parte del paquete postgresql, permite crear usuarios o roles en un servidor de bases de datos PostgreSQL (local o remoto) sin necesidad de ejecutar consultas SQL.

Su sintaxis es bastante sencilla
createuser prueba2

Este comando, intentará crear el usuario prueba2 en el cluster de postgres en el puerto 5432.
Para ver el listado completo, podemos ejecutar

createuser --help



Como vemos en las opciones de conexión, podemos especificarle el puerto, así no buscará un cluster en el 5432.  También podemos ver que se puede especificar el host y un usuario (-h y -U), dicho usuario debe tener permisos necesarios para poder crear roles en ese host.  Al igual que psql, tiene los parámetros -w y -W para tratar la contraseña de conexión.

La opción -e es interesante, porque es el equivalente al verbose de otros comando, lo que hará es ir mostrando por pantallas las instrucciones que vaya ejecutando.  También vemos los demás parámetros que están bastante bien descritos en la imágen superior.

Así que creemos el usuario prueba3 como super usuario y que muestre las instrucciones.



He utilizado las opciones
-e  Echo
-E Contraseña cifrada
-s  Super Usuario
-h  Host
-p Puerto
-U  usuario con permisos para crear roles
-W forzar que pida contraseña para conexión
-P  forzar a que pida contraseña del nuevo usuario


Permisos al usuario con ALTER ROLE

ALTER ROLE, tiene varias opciones, entre ellas:
  • SUPERUSER/NOSUPERUSER.
  • CREATEDB/NOCREATEDB.
  • CREATEROLE/NOCREATEROLE.
  • CREATEUSER/NOCREATEUSER.
  • LOGIN/NOLOGIN. Especificamos si será un rol o un usuario. El usuario tiene permisos para acceder a la base de datos a traves de cualquier cliente, el rol no.
  • PASSWORD.
  • VALID UNTIL. Expiración de usuarios.

Vimos anteriormetne cómo cambiar la contraseña utilizando ALTER ROLE o ALTER  USER.

La sintaxis es

ALTER ROLE usuario WITH opción

Por ejemplo, el usuario prueba2 tiene permisos como super usuario, cambiémoslo para que ya no lo sea.



Crear Base de Datos y Asignación de Permisos sobre una base de datos

Para finalizar veremos dos acciones más con los usuarios, la primera será crear una base de datos y asignarle un usuario específico como propietario, dicho usuario debe ser SUPERUSER.

Para esto usaremos el comando DML

CREATE DATABASE nombre_basedatos WITH OWNER prueba2;


Y si ya tenemos una base de datos creada y queremos asignarle todos los permisos a un usuario

GRANT ALL PRIVILEGES ON DATABASE nombre_basedatos TO prueba2;


En otro tutorial veremos los permisos. Todo esto y mucho más espero poderlo mostrar en el curso de Administración Avanzada de PostgreSQL (muy pronto), así que estén pendientes registrándose para estar atentos al blog y/o promociones descuentos en los cursos.


Si quieres estar enterado, regístrate.






También recuerda estar atento a mis redes sociales, especialmente Facebook, Youtube (esta clase tendrá un video ahí), Twitter y Tumblr.




viernes, 18 de enero de 2019

Cualquier Curso a $9.99







Cualquier Curso a $9.99.

Por tiempo limitado, los precios de todos los cursos que tengo será de $9.99 cada uno.  Aprovecha la oferta.
Puedes ver todos los productos haciendo click acá
https://goo.gl/oS2s4o
https://goo.gl/hcyDPn

https://goo.gl/zGZpSD
https://goo.gl/zGZpSD
https://goo.gl/urvSeP



https://goo.gl/j8i34C
https://goo.gl/j8i34C


martes, 15 de enero de 2019

Cursos a $9.99

⚡️ Cualquier Curso a 9.99

#Inicio #Año #Escolar #tiempo #limitado

Para más información y cupones  ☞ https://goo.gl/JndrRP

#Udemy #udemycoupon #udemydiscount #Desarrollo #Web #BackEnd #Python #Django #Replicación #SymmetricDS #AdoNet #SQLServer #PostgreSQL #SymmetricDS #Data

 
>