miércoles, 27 de marzo de 2019

Curso Gratis Construye WebApi con ASP Dot Net

Curso Gratis por tiempo y cupones limitados.

En el curso Construye Web Api con ASP Net Core y Visual Studio Code, aprenderás las bases para realizar tu propio Web Service WebApi (RestFul API) con el nuevo framework de Microsoft, llamado ASP Net Core.  Además está hecho para hacer todo el proyecto completo utilizando Visual Studio Code, con el cual no tendrás dependencia de otro editor ni de sistema operativo.

Si no has alcanzado cupones gratis, puedes aún acceder a un super descuento del 90% utilizando el cupón WEBAPI_1_2019 o haciendo click en el siguiente botón
Inscríbete

Además, no te pierdas de las promociones en los demás cursos.  Todos al precio menor para tu país.

RestFul Api con Python usando Django Rest FrameWork
$9.99
Inscríbete
Construye Web Api con ASP Net core y Visual Studio Code
 
$9.99
Inscríbete
Desarrollo Web con Python usando Django para Principiantes
$9.99
Inscríbete
Replicación de Base de Datos con SymmetricDS
 
$9.99
Inscríbete
Entity FrameWork para Principiantes
 
$9.99
Inscríbete
Domina el ORM de Django


$9.99
Inscríbete
Programación en Capas Web y Escritorio con ADO Net
$9.99
Inscríbete

Para Acceder al cupón, comparte con el siguiente botón


lunes, 25 de marzo de 2019

Entornos Virtuales Python - Windows y Linux

#python #django #VirtualEnv #desarrollo #web #restapi #apirest #restful

En esta ocasión, seguimos con los tips de python.  Toca el tema de Entornos Virtuales y para que quede mejor, les dejo un video.  Para cualquier aplicación que vayamos a hacer en Python, yo recomiendo crear un entorno virtual, ¿pero qué es?  ¿cómo se usa?  Entérate en el siguiente video.





Este video, es útil para realizar aplicaciones web, por ejemplo te dejo el enlace a tres cursos de desarrollo web con django, espero puedas inscribirte.



lunes, 18 de marzo de 2019

Calendario jQuery DateTimePicker en Formulario Django


#jQuery #datepicker #python #django #calendar

Algo muy importante al momento de trabajar con fechas y formularios, es evitar la tediosa tarea de validar si la fecha es válida o no.  Esto influye en varios fallos al momento de procesar, ya que el usuario puede ingresar texto u otro dato que no es necesariamente el formato que estamos esperando.

En este tutorial, te explicaré cómo usar un plugin (de muchos que hay por ahí) de jQuery para el manejo de fechas/horas en el FrontEnd.

Trabajaremos con XDSoft DateTimePicker, pueden encontrar la documentación en este enlace o el código fuente acá para que puedan ampliar funcionalidades.

En el curso de Desarrollo Web con Python usando Django, construimos un formulario de facturación, el cual recibe una fecha de forma manual (indicada por el usuario).

Trabajaremos la forma de integrar el plugin con un formulario de Django.  Que al final no es tan complicado, porque Django es Python y éste último trabaja bajo el principio de hacer desarrollo rápido de aplicaciones.

base.html

Este archivo es nuestra plantilla base y está ubicada en templates/base/, acá es donde haremos la primera parte del trabajo.

En el head, agregaremos la referencia a la hoja de estilo

 <!-- XDSoft DateTimePicker -->  
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.min.css" integrity="sha256-DOS9W6NR+NFe1fUhEE0PGKY/fubbUCnOfTje2JMDw3Y=" crossorigin="anonymous" />  


Y al final del archivo base, agregar el llamado a la librería, eso si, deben estar pendiente que si no lo ponen como última línea, por lo menos esté después de haber cargado la librería para jQuery.


 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js" integrity="sha256-FEqEelWI3WouFOo2VWP/uJfs1y8KJ++FLh2Lbqc8SJk=" crossorigin="anonymous"></script>  

Para poder permitir ingresar código javascript en las plantillas que hereden de base.html, crearemos un bloque que llamaré scripts_local y lo dejaremos vacío, el bloque lo dejé al final de la plantilla.

  {% block scripts_local %}  
  {% endblock scripts_local %}  


Con esto, ya deberíamos de poder trabajar, para esto iremos al siguiente archivo a procesar, el formulario de Django

forms.py

Acá no hay mucho que cambiar a lo que se ha hecho en el curso, sólo pondremos el input de la fecha de sólo lectura


class FacturaEncForm(forms.ModelForm):  
   fecha_factura = forms.DateInput()  
   class Meta:  
     model = FacturaEnc  
     fields = ['fecha_factura', 'observacion']  
   def __init__(self, *args, **kwargs):  
     super().__init__(*args, **kwargs)  
     for field in iter(self.fields):  
       self.fields[field].widget.attrs.update({  
         'class': 'form-control'  
       })  
     self.fields['fecha_factura'].widget.attrs['readonly'] = True  


Pueden ver que eso se logró en la última línea y campo de formulario se llama fecha_factura.

Ahora vamos a inicializar el plugin, justo en el archivo del template donde se renderiza el formulario.

factura_form.html

Acá nos iremos directamente al bloque creado en la plantilla base.
Inicializaremos el plugin, daremos formato a la fecha y quitaremos la sección de hora (time)

 {% block scripts_local %}  
 <script>  
  $(function () {  
   $("#id_fecha_factura").datetimepicker({  
       format: 'd/m/Y',  
       timepicker:false  
   });  
  });  
 </script>  
 {% endblock scripts_local %}  

El nombre usado id_fecha_factura, es del formato de django de nombrar los inputs en la plantilla, la cual es la plabra id seguido del guión bajo y el nombre del elemento del formulario.

Y listo, ya con esto deberíamos poder trabajar con el plugin jQuery los campos fechas.

Locale (Idioma)

Aunque ya está listo, sólo haría falta que muestre los datos en nuestro idioma, según la documentación, se debe invocar la función SetLocale y para que sea de forma global, lo hice en la plantilla base, al final agregué el llamado al idioma español (es), pero bien puede ser cualquier otro idioma.

   <script>  
     $(document).ready(function () {  
           jQuery.datetimepicker.setLocale('es');  
     });  
   </script>  

Y ya con esto tenemos la implementación de un plugin jQuery para el manejo del formato de la fecha en nuestro proyecto hecho en Django.


Si estás interesado en el curso, no te pierdas esta oportunidad de tenerlo con un 95% de descuento desde el siguiente botón.


sábado, 16 de marzo de 2019

Nuevo Curso RestFul WebApi con Asp Net Core y Visual Studio Code


RestFul Web Api con ASP Net Core y Visual Studio Code

En este nuevo curso, aprenderás a realizar un Web Service utilizando únicamente Visual Studio Code como editor. 

✓ Desarrollo de una WebApi ✓ CRUD con Verbos HTTP ✓ Autenticación Json Web Token ✓ Servicio de Usuario ✓ VS Code 100%  ✓ Código fuente en GitHub y BitBucket

Por introducción se ofrece con un 90% de descuento utilizando el cupón (WEBAPI_1_2019) provisto en el siguiente botón, por tiempo limitado.

Curso en constante actualización, próximamente se agregarán más clases extras. 

 90% Descuento

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.


 
>