Está en la página 1de 12

Prueba de Técnica

Objetivo
Esta prueba busca evaluar tus conocimientos técnicos que requerimos dentro del área de Tecnología
y Desarrollo.

Al final de cada pregunta, escribe tu respuesta.

Preguntas
1) Escribe una función en python que reciba un número y regrese el número primo posterior más
cercano.

Ejemplo: GET http://localhost/miServicio?num=20


regresa 23

La pregunta 1 se realizó en Jupyterlab usando el núcleo de Python3.


El código de la imagen es el siguiente:
def validar_numero_primo(x):
lista = []
for i in range(2,x):
lista.append(x % i)
# all regresa valores True o false
return all(lista)

def numero_primo_siguiete(x):
a = []
for i in range(x+1, 2*x):
if validar_numero_primo(i):
a.append(i)
#print(a)
if len(a) == 0:
if x == 1 or x == 0:
a = [2]
return min(a)
print(numero_primo_siguiete(20))

Pero como en el ejercicio se pedía que fuera respecto a una página web, también realice el
proceso en Django para que el usuario pudiera escribir el número en la url e imprimiera el
primo siguiente. En la siguiente imagen se observa cómo es posible esto:

El código de esta parte es muy extenso porque incluye código de las urls.py, views.py y el
template, pero dejaré un screenshot del código. En la siguiente imagen se ve como esta
compuesto el archivo views.py

Cabe resaltar que puse el código html directamente en el código python, esto para hacerlo
de varias formas de como se puede escribir los templates en Django; esta no es la forma
correcta de hacerlo. La forma correcta de hacerlo es configurar desde settings.py la ruta
de donde se tomarán los templates.

2) Del api de pokemon cuya documentación se encuentra en la pagina https://pokeapi.co/,


realiza las siguientes instrucciones:

Crea una función en python que consuma el siguiente servicio:


API GET https://pokeapi.co/api/v2/type/{name}/

donde "name" es un parámetro de la función que va ser el tipo de pokemon y la función va


regresar la información del tipo
(documentación del api https://pokeapi.co/docs/v2.html/#types).

ejemplo (el ejemplo está en javascript, lo puedes hacer en el lenguaje que quieras):

function getPokemonType(name){
url = "https://pokeapi.co/api/v2/type/" + name
// Aqui el request get de la url

return //response
}

console.log(getPokemonType("ground"))

Para esta pregunta se realizó primero la lista de los tipos de Pokemons que hay. Se utilizó
solo la librería de requests para obtener los datos de la API. Iba usar pandas para
acomodar los datos, pero ví que era más óptimo usar solo listas.
Seguidamente se realizó un ciclo para obtener la información de cada pokemon y
guardalo en json o html. En este caso lo hice en html para que pudiera funcionar con
Django.
La función final sería la que se llama info_tipo_pokemon() la cual solo hay que meterle el
parámetro del nombre para que nos imprima la información. En la imagen se observa que
pedimos tipo “normal” y nos arroja la información de todo ese tipo.
El código sería:
import requests
import pandas as pd
pagina = "https://pokeapi.co/api/v2/type/"
datos = requests.get(pagina)
# Obtenemos lista de tipos de pokemon
lista_tipos_de_pokemon = []
if datos.status_code == 200:
json = datos.json()
resultados = json.get("results",[])
if resultados:
for tipo in resultados:
tipo_de_pokemon = tipo["name"]
lista_tipos_de_pokemon.append(tipo_de_pokemon)
# Obtenemos las información de todos los tipos de pokemon
informacion_todos_tipos = []
for i in lista_tipos_de_pokemon:
pagina = "https://pokeapi.co/api/v2/type/"+i
datos = requests.get(pagina)
if datos.status_code == 200:
json = datos.json()
informacion_todos_tipos.append(json)
# Creamos una funcion para pasarle los parametros de tipos
def info_tipo_pokemon(indica_el_tipo):
# Pasamos a diccionario las dos listas
diccionario_tipo = dict(zip(lista_tipos_de_pokemon, informacion_todos_tipos))
a = diccionario_tipo.get(indica_el_tipo)
return a
info = info_tipo_pokemon("normal")
print(“info”)

Al final nos arroja toda esta información:

Para el caso de Django se utilizaron las siguientes funciones en el archivo views.py

Le puse la ruta absoluta del template, pero no es la forma correcta de hacerlo, lo hice así
para poder desglosar paso a paso cómo se abre el template de forma manual el Django.
La forma correcta es con la función Render que viene en Django.
En la siguiente imagen se ve como ya se ha renderizado una tabla con los pokemons y su
información correspondiente.
El formato de la tabla está directamente en el código html con la etiqueta de <style>
El usuario le puede dar click en cualquier enlace para poder visualizar la información en
formato json de cada tipo de pokemon, como se observa en la siguiente imagen:
3) Modificar la función anterior para que la respuesta solo regrese el arreglo "pokemon"

Para esta pregunta se utilizó la información que arrojaba la función anterior para poder
ordenar los pokemons dependiendo de su tipo, es decir, esto arrojará todos los pokemons
acomodados por su tipo. En la siguiente imagen se observa cómo se imprime el nombre de
los pokemons:

El código sería el siguiente:


# Todos los pokemons dependiendo de su tipo
# Se ordenaran en una lista de listas
# Se ponen en orden dependiendo del tipo
pokemon_por_tipo = []
for i in range(len(lista_tipos_de_pokemon)):
lista_temporal = []
pagina = "https://pokeapi.co/api/v2/type/"+lista_tipos_de_pokemon[i]
datos = requests.get(pagina)
nombre_de_los_pokemon = []
if datos.status_code == 200:
json = datos.json()
resultados = json.get("pokemon")
for i in resultados:
lista_temporal.append(i['pokemon'].get("name"))
pokemon_por_tipo.append(lista_temporal)
pokemon_por_tipo_normal = pokemon_por_tipo[0]
pokemon_por_tipo_fighting = pokemon_por_tipo[1]
pokemon_por_tipo_flying = pokemon_por_tipo[2]
pokemon_por_tipo_poison = pokemon_por_tipo[3]
pokemon_por_tipo_ground = pokemon_por_tipo[4]
pokemon_por_tipo_rock = pokemon_por_tipo[5]
pokemon_por_tipo_bug = pokemon_por_tipo[6]
pokemon_por_tipo_ghost = pokemon_por_tipo[7]
pokemon_por_tipo_steel = pokemon_por_tipo[8]
pokemon_por_tipo_fire = pokemon_por_tipo[9]
pokemon_por_tipo_water = pokemon_por_tipo[10]
pokemon_por_tipo_grass = pokemon_por_tipo[11]
pokemon_por_tipo_electric = pokemon_por_tipo[12]
pokemon_por_tipo_psychic = pokemon_por_tipo[13]
pokemon_por_tipo_ice = pokemon_por_tipo[14]
pokemon_por_tipo_dragon = pokemon_por_tipo[15]
pokemon_por_tipo_dark = pokemon_por_tipo[16]
pokemon_por_tipo_fairy = pokemon_por_tipo[17]
pokemon_por_tipo_unknown = pokemon_por_tipo[18]
pokemon_por_tipo_shadow = pokemon_por_tipo[19]
print(pokemon_por_tipo_ghost)

4) Modificar nuevamente la función anterior, esta vez para obtener solo los pokemons que
empiecen con la letra "s"

Para esta pregunta se utilizó la información de la función anterior para tomar como
ejemplo los pokemons fantasma y iterar sus nombres. Y solo con una condicional le decimos que
si la primera letra del nombre es igual a “S” que lo guarde en una lista y luego que la imprima.
En la siguiente imagen se observa como se realizó.
# Ya que tenemos los pokemons acomodados por typo
# Tomamos por ejemplo la lista de los pokemons fantasma
# Esto lo podemos hacer para cada lista de pokemons
pokemon_fantasma_inicio_s = []
for i in pokemon_por_tipo_ghost:
if i[0] == "s":
pokemon_fantasma_inicio_s.append(i)
print(pokemon_fantasma_inicio_s)

5) Escriba los métodos necesarios para crear, actualizar, obtener y eliminar a un usuario
utilizando python como lenguaje y django como framework, proponga el esquema de base de
datos para almacenar la mayor información posible de un usuario, los datos obligatorios para
crear a un usarios son su email y password. (las respuesta de los servicios debe ser en
formato json)
Usando Django como Framework tenemos:
Como es un proyecto nuevo en Django se debe de crear un superusuario con el comando:

python manage.py createsuperuser

Esto nos sirve para entrar al panel de administración de Django.


En el panel de administración de Django podemos agregar usuarios de la forma sencilla y
menos recomendable.

Se presiona en +Add para añadir un usuario.


Agregamos el usuario David como ejemplo y no sale lo siguiente:
Ya tenemos el usuario registrado y tenemos la opción de actualizar el usuario con sus
apellidos y su email. En la parte de hasta abajo nos da la opción de eliminar el usuario de forma
muy sencilla.

Solo basta con presionar el botón de Delete para que se elimine el usuario.
En la siguiente imagen se ve como están registrados los dos usuarios que realizamos.

Usando Python como Lenguaje tenemos:


Para crear un usuario usamos:
Se usa una clase para crear un nuevo usuario, con UserCreationForm
El template registrar.html es solo un formulario para el usuario. Y se usa reverse_lazy()
para direccionar al usuario después de loguearse.

Para actualizar un usuario

Para actualizar un usuario usamos la clase UserChangeForm para poder modificar el


formulario de los usuarios, lo cual es una aplicación de usuarios en Django que viene por
defecto. Donde los atributos que serán por defectos vienen en un “form-control”
Se crea una meta clase tipo User para obtener el usuario de donde se van a sacar los
campos a modificar en la lista de campos.

Para eliminar un usuario en Django de forma general, sería:

Hay muchas formas para eliminar un usuario, también podríamos hacer una meta clase
para eliminar el registro, pero una forma sencilla sería realizar una peticion con User.objects.get
para ver si el usuario se encuntra, si se encuentra que lo elimine, si no, que imprima que el usuario
no existe y presente el template_de_eliminacion.html.

Para que la respuesta sea un json dependiendo de los usuarios que se registren tenemos que usar
la clase que se usa para crear el usuario.

Se importa el modelo selializers:


En esta clase se indica de qué modelo se va a serializar para que salga en formato json.

Se importa APIView en views.py la vista de RestFramework. Se indica que se utilizará el modelo


de UserSerializer.
Depués se reescribe el método get de APIView, y se crea una lista que va ser la que extraerá todos
los objetos. Y se crea una respuesta donde se tiene que indicar el query set de dónde se va
serializar, que en este caso será el objeto llamado lista.
Luego se regresará en la pantalla de usuario un conjunto de datos tipo json.
Y al final se crea una url en urls.py que nos dará el nombre y el email de todos los usuarios.

También podría gustarte