fbpx

Parte 4/6: CCNA Devnet 200-901:͇ 𝗜𝗻𝘁𝗿𝗼 𝗮 𝗣𝘆𝘁𝗵𝗼𝗻.

Hola, un nuevo post para la serie CCNA Devnet y esta vez le toca a Python, a modo introductorio pensado para la certificación, ya que hay muy buenos tutoriales en la red, por lo que en referencias estaré colocando en los enlaces.

Este post estará enfocado en lo que pude ver que preguntaban en el examen y de seguro debes saber: como utilizar la librería requests. ¿Quieres comprender las preguntas relacionadas a requests?, pues sigue leyendo:

1. Inicia tu IDE Python

Aunque será explicado con GIF, puedes verlo por ti mismo las líneas aquí mostradas. En caso que quieras probarlo en tu ordenador, te recomiendo que veas el post anterior Parte 2/6: CCNA Devnet 200-901 – 𝗣𝗿𝗲𝗽𝗮𝗿𝗮 𝘁𝘂 𝗣𝗖. ¿No puedes instalar un IDE Python en tu PC por algún motivo (PC de trabajo, políticas, etc)? No te preocupes, hay un IDE de Python en línea que puedes usar: https://repl.it/

IDE Python online: Repl

No alt text provided for this image

Repl.it es una página que te permite correr código directo en tu navegador. Con más de 50 lenguajes disponibles, entre ellos, Python, es tan sencillo como ingresar a este link y comenzar a escribir el código y luego dar clic en Run.

Un dato curioso es que la definición de REPL es: “Read–eval–print loop”. Mayor información aquí.

Nota: Repl no necesitas tener una cuenta para poder utilizarlo, pero si quieres que tus progresos se guarden, crear una cuenta permite almacenarlos.

2. Hello World

¿Qué tal si comenzamos con escribir algo en Python que imprima en pantalla Hola Mundo?. Intentemos hacerlo directamente a ver que pasa:

No alt text provided for this image

Genera un error. El problema es que Python está intentando ejecutar Hola Mundo pero no sabe que es. Nosotros sabemos que es una cadena de caracteres, pero el no. Para decirle a Python que es una cadena de caracteres, debes encerrarlo en una de estas 4 opciones:

  • comillas sencillas
  • comillas dobles
  • ”’comillas sencillas triples”’ o
  • “””comillas dobles triples“””

Los datos en el medio de las comillas se le conocen como string.

Intentemos ahora diciéndole a Python que será una cadena de caracteres o string:

No alt text provided for this image

No muestra error, pero no despliega la información en la terminal. Para poder imprimir en ella es necesario utilizar “algo” que le diga a Python que haga eso: una función (function). Python viene con muchas funciones que te permiten realizar diferentes acciones y una de ellas es print(). Esta función te permite enviar lo que pongas en el medio de los paréntesis, data al terminal. En esta ocasión coloquemos nuestro string dentro la función print(), quedando como resultado: print(“Hola Mundo”). Veamos el resultado:

No alt text provided for this image

¡Listo, Nuestra primera línea de código en Python!

3. Variables

Otra característica que tiene todo lenguaje de programación son las variables. Ellas te permiten guardar información. Para asignar información a ellas, su formato sería:

  • var = info_a_guardar

Existen diferentes tipos de datos. Hasta ahora hemos visto el tipo de dato string. Aprendamos un nuevo tipo de datos: int. Esta última es para almacenar números enteros. Veamos un ejemplo y combinarlo con el ejemplo anterior:

print('Hola Mundo')

a= 1000
b= "Hola Mundo"

print(a,b)
No alt text provided for this image

Podemos ver en la terminal que imprime en nuestro 1er print Hola Mundo y luego en el 2do print la variable b con la info 1000 Hola Mundo.

Nota que las variables no le he colocado comillas dentro de la función print() ya que queremos que la interprete como variable y no como la letra a o b. Otro dato interesante es que dentro de la función están separados por una coma (,). Esto indica que puedes enviar varias variables o cadenas de caracteres separados por coma.

Nota: A diferencia de otros lenguajes, Python puedes utilizar variables inmediatamente sin tener que inicializarlas (indicar tipo de datos).

4. Funciones integradas

En nuestro Hola Mundo, aprendimos que existe la función print(). La misma ya viene integrada y lista para usarse. Existen otras funciones integradas interesantes como: input(). Esta te permite obtener datos desde la terminal. Veamos como funciona:

print('Hola Mundo')

a= 1000
b= "Hola Mundo"

print(a,b)

c= input("Introduzva un dato: ")

print("El valor de c es: ", c)
No alt text provided for this image

Introducimos el valor “Kevin”, lo guardamos en la variable c y luego imprimimos el valor. Nuevamente a print() se le envía dos datos, una cadena de texto que dice “El valor de c es: ” y la variable c, separadas por una coma (,)

Nota: Puedes ver todas las funciones integradas con la función dir(__builtins__)

>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError',
'BaseException', 'BufferError', 'BytesWarning',
'DeprecationWarning', 'EOFError', 'Ellipsis',
'EnvironmentError', 'Exception', 'False', 'FloatingPointError',
'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
'None', 'NotImplemented', 'NotImplementedError', 'OSError',
'OverflowError', 'PendingDeprecationWarning', 'ReferenceError',
'RuntimeError', 'RuntimeWarning', 'StandardError',
'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError',
'SystemExit', 'TabError', 'True', 'TypeError',
'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',
'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning',
'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError',
'_', '__debug__', '__doc__', '__import__', '__name__',
'__package__', 'abs', 'all', 'any', 'apply', 'basestring',
'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable',
'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex',
'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod',
'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter',
'float', 'format', 'frozenset', 'getattr', 'globals',
'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int',
'intern', 'isinstance', 'issubclass', 'iter', 'len',
'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview',
'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',
'property', 'quit', 'range', 'raw_input', 'reduce', 'reload',
'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted',
'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr',
'unicode', 'vars', 'xrange', 'zip']

5. Funciones externas: PIP

Una función muy utilizada en el examen es requests. Esta función no es parte de las librería integrada, debes descargarla de internet. Pero tranquilo… Python te facilita esta tarea.

Un módulo que viene por defecto al instalar Python (desde la versión 3.4) es pip que significa Package Installer for Python. Este módulo te permite descargar librerías.

Si utilizas repl.it, no es necesario instalar el módulo requests, ya que ellos lo hacen automáticamente por ti, pero en caso que estés realizándolo desde tu ordenador, debes instalarlo con el comando pip install requests.

Para poder utilizar estas funciones, necesitas importarlas en tu área de trabajo. el comando para realizarlo es import LIBRERIA. Con esto llamas la librería con todas sus funciones.

No alt text provided for this image

Lo bonito de Python, es que si no tienes las funciones, con un solo comando puedes descargar su librería y utilizar sus funciones inmediatamente.

6. Requests

Esta función te permite conectarte por web de modo HTTP o HTTPS (lo que uno hace al navegar normalmente), pero desde Python.

¿Y qué funciones hay dentro de esta librería?, bueno, una pregunta importante. Puedes realizar los siguientes métodos:

No alt text provided for this image

La forma de llamarlos es agregando un punto (.) a la librería y colocar la función a utilizar. Ejemplo: requests.get() o requests.post(). Un ejemplo de su uso son las siguientes líneas:

requests.get('https://api.github.com/events')
requests.put('https://httpbin.org/put', data = {'key':'value'})
requests.delete('https://httpbin.org/delete')
requests.post('https://httpbin.org/post', data = {'key':'value'})

Naveguemos a la página http://www.webcode.me con Python y luego con nuestro navegador y ver sus similitudes:

import requests

resp = requests.get("http://www.webcode.me")


print(resp.text)
No alt text provided for this image

¿Puedes observar que obtienes la misma información?, ya puedes navegar por HTTP o HTTPS con Python.

Aquí hay un detalle, en la impresión no coloqué la variable resp solamente, sino que fue resp.texty hay una razón por ello. Lo que pasa es que la función requests.get devuelve un objeto.

Espera ¿un objeto?… ¿Qué es un objeto? bueno, en resumidas cuentas:

son agrupaciones de variables (llamadas atributos) y funciones (llamadas métodos) especialmente diseñadas que trabajan juntas para hacer algo útil.

De hecho, ¡Todo en Python son objetos!, si…, TODOS. Inclusive nuestro Hola Mundoera un objeto que devuelve una variable tipo string. ¿Quieres ver un ejemplo?, ejecuta la siguiente línea:

> print("Hola Mundo".upper())
HOLA MUNDO
>

Puede que estés confundido ahora mismo, pero míralo como un nombre donde agrupas muchas cosas. De hecho la función requests.get devuelve muchos resultados guardados en una variable, no solamente el cuerpo del contenido, sino el resultado de la petición, el encabezado, etc.

En nuestro ejemplo, solo preguntamos por el cuerpo del contenido resp.text, pero existen muchos otros.

Lastimosamente en repl.it no permite visualizar los objetos dentro de una librería llamada con import (Que yo conozca. Si sabes como, dímelo en los comentario). Es por esto que me encanta Atom con sus complementos Kite e Hydrogen, ya que puedes ver inmediatamente las opciones:

import requests


resp = requests.get("http://www.webcode.me")


resp.status_code
resp.url
resp.request
resp.headers


print(resp.text)
No alt text provided for this image

Nota: Atom y sus paquetes mostrados aquí, puedes ver su instalación en mi post Parte 2/6: CCNA Devnet 200-901 – 𝗣𝗿𝗲𝗽𝗮𝗿𝗮 𝘁𝘂 𝗣𝗖.

7. Pregunta de examen

En Cisco CCNA Devnet, pude observar que las preguntas giraban alrededor de comprender el uso de la librería requests de Python aplicado al servidor Cisco DNA Center.

Por suerte, Cisco tiene un servidor DNA Center disponible para probar, aquí los datos:

url= https://sandboxdnac.cisco.com/

user= devnetuser

pass= Cisco123!

Si ingresas al link, te solicitará usuario y contraseña y te redireccionará dentro del Dashboard de esta plataforma. Entremos a la plataforma como cualquier usuario normal.

No alt text provided for this image

Si utilizáramos este enlace para consumir la data interna con la librería requests, sería muy complicado porque enviaría mucha información HTML innecesaria.

Para evitar este problema, nos dan otro enlace a ingresar a la plataforma, pero solo regresa la data necesaria y estructurada. Esta vez ingresemos a un modo que los programas puedan interactuar facilmente.

Repitamos los pasos para ingresar a la plataforma, pero esta vez con una REST API, ingresando al siguiente link.

https://sandboxdnac.cisco.com/dna/system/api/v1/auth/token

user= devnetuser

pass= Cisco123!

Aquí el código para hacerlo:

import requests

resp2 = requests.post("https://sandboxdnac.cisco.com/dna/system/api/v1/auth/token",auth=('devnetuser', 'Cisco123!'), verify=False)

print(resp2.text)
No alt text provided for this image

Verás que en este ejempl usamos el parámetro interno auth para enviar los datos de usuario y contraseña con autenticación básica*.

¿Y como sabía que podría utilizar auth?… Bueno, no lo sabía, pero todo método post debe tener algún parámetro que envíe datos ¿no?, Así que nos guiamos con la ayuda interactiva, o ir a la fuente de la función, porque no sabemos que pensaron al momento de diseñarla:

No alt text provided for this image

El resultado de resp2.text es un token en formato JSON, que debemos usar en nuestras peticiones futuras al Cisco DNA Center. El token tiene un tiempo de expiración generalmente. En este caso es de 1 hora.

y ¿Qué es JSON?, bueno aquí un post para tener una idea: Pizza con Python

¿Cómo usarlo en Python?, bueno, esto queda para nuestro próximo futuro post…

*: Existen varios métodos de autenticación para web como Basic, Digest, Bearer, NTLM, Negotiate, etc. Cisco DNA Center utiliza el método Basic.

Conclusiones

Cuando comienzas algo nuevo como aprender un idioma, es difícil avanzar si no sabes que puedes hacer. Es por esto que es altamente recomendable instalar ayudas dentro de tu IDE.

Bueno ha terminado este artículo. Espero que les haya dado una guía para comprender un poco sobre Python orientado a la certificación CCNA DEVNET.

¿Dudas, opinión o sugerencias? Déjame tus comentarios.

Si te interesa alguno de nuestros servicios o leer todos nuestros posts, puedes localizarlos por esta red social o en nuestro portal SYNCORP. Gracias por la lectura.

Referencias:

Guía de librería requests:

https://requests.readthedocs.io/en/master/user/quickstart/

https://stackabuse.com/the-python-requests-module/

Cisco learning info:

https://developer.cisco.com/learning/modules/programming-fundamentals

https://developer.cisco.com/learning/modules/dnav3-intro-dnac

Coursera – Python para todos:

https://www.coursera.org/programs/mitradel-on-coursera-hgeyt?authType=google&collectionId=&errorCode=unknownStatus&productId=F-h1g0w7EeWeOApO_l5R1w&productType=s12n&showMiniModal=true

Leave a Reply