0% encontró este documento útil (0 votos)
178 vistas12 páginas

David - Prueba Técnica Developer (Python)

Este documento contiene las respuestas a 5 preguntas técnicas sobre Python y Django. La primera pregunta pide crear una función para encontrar el próximo número primo más cercano. La segunda pregunta pide consumir la API de Pokémon y obtener información sobre tipos. La tercera pregunta modifica la función anterior para devolver solo los Pokémon. La cuarta pregunta filtra los Pokémon que comienzan con S. La quinta pregunta explica cómo crear, actualizar, obtener y eliminar usuarios en Django.

Cargado por

endoeca
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
178 vistas12 páginas

David - Prueba Técnica Developer (Python)

Este documento contiene las respuestas a 5 preguntas técnicas sobre Python y Django. La primera pregunta pide crear una función para encontrar el próximo número primo más cercano. La segunda pregunta pide consumir la API de Pokémon y obtener información sobre tipos. La tercera pregunta modifica la función anterior para devolver solo los Pokémon. La cuarta pregunta filtra los Pokémon que comienzan con S. La quinta pregunta explica cómo crear, actualizar, obtener y eliminar usuarios en Django.

Cargado por

endoeca
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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 [Link]


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):
[Link](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):
[Link](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 [Link], [Link] y el
template, pero dejaré un screenshot del código. En la siguiente imagen se ve como esta
compuesto el archivo [Link]

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 [Link] la ruta
de donde se tomarán los templates.

2) Del api de pokemon cuya documentación se encuentra en la pagina [Link]


realiza las siguientes instrucciones:

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


API GET [Link]

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 [Link]

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

function getPokemonType(name){
url = "[Link] + name
// Aqui el request get de la url

return //response
}

[Link](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 = "[Link]
datos = [Link](pagina)
# Obtenemos lista de tipos de pokemon
lista_tipos_de_pokemon = []
if datos.status_code == 200:
json = [Link]()
resultados = [Link]("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 = "[Link]
datos = [Link](pagina)
if datos.status_code == 200:
json = [Link]()
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 [Link]

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 = "[Link]
datos = [Link](pagina)
nombre_de_los_pokemon = []
if datos.status_code == 200:
json = [Link]()
resultados = [Link]("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 [Link] 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 [Link] 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 [Link]
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 [Link] 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 [Link] que nos dará el nombre y el email de todos los usuarios.

Common questions

Con tecnología de IA

A Django API should handle user deletion requests by using `User.objects.get` to locate the user. If the user exists, proceed with deletion and return a success response in JSON. If the user is not found, return an error message indicating the user does not exist, integrating error handling to prevent exceptions from revealing sensitive server-side information. Providing informative and appropriate JSON responses enhances the robustness of the API .

The correct way to integrate HTML templates within a Django application involves setting up the `TEMPLATES` configuration in `settings.py` to define the directory for template files. Instead of hard-coding HTML into Python code, use the `Render` function provided by Django to dynamically render HTML templates with context variables passed in, allowing for separation of presentation and logic .

Using Python's built-in `all()` function within a prime validation algorithm is important because it succinctly verifies that a number is not perfectly divisible by any preceding integers (besides 1). This enhances code readability by abstracting the iteration logic into a single logical statement which checks all divisibility conditions at once and returns `True` if all evaluations are false (i.e., no factors).

To consume a RESTful API to retrieve data about Pokemon types in Python, use the `requests` library to send an HTTP GET request to the endpoint `https://pokeapi.co/api/v2/type/{name}/`, where `{name}` is the type of Pokemon you are interested in. Parse the JSON response to extract and return relevant information about the Pokemon type .

In Django, user management can be implemented using class-based views by defining methods within views that correspond to HTTP actions. `UserCreationForm` is used to create users, while updates can be handled using `UserChangeForm`. Deletion can be implemented by querying for a user with `User.objects.get` and deleting the user if found. Responses should be formatted in JSON, using serializers to handle the output conversion to ensure RESTful API design .

The recommended approach to creating a Django superuser is through the command line using `python manage.py createsuperuser`. This is important as it provides access to Django’s admin panel, allowing for administrative functions such as managing users directly via a graphical interface. This method ensures a high level of control and oversight during the development and testing phases .

To find the next prime number after a given integer using Python, you can define a function `numero_primo_siguiente(x)` that iterates through numbers starting from `x+1` and checks primality using a helper function `validar_numero_primo(x)`. This helper function checks if a number is divisible by any number smaller than itself (except 1). The first number verified as prime by this method is returned as the next prime number .

To modify a Python function that orders Pokemons by type to return only those whose names start with a specific letter, such as 'S', iterate through the list of Pokemon names already categorized by type and use a conditional statement to check the first letter of each name. Append names starting with the designated letter to a new list and return or print this filtered list. In this case, iterate over `pokemon_por_tipo_ghost` and append names starting with 'S' .

To request and process information from the PokeAPI for a specific Pokemon type, send an HTTP GET request to the endpoint `https://pokeapi.co/api/v2/type/{name}/` using the `requests` module. Parse the JSON response to access the information about the specified type. Extract the 'pokemon' array from the JSON object and process it to gather details about each Pokemon of that type, such as their names .

To ensure that a Django REST API returns a JSON response when managing user data, define a serializer for the user model using Django REST Framework’s `serializers`. Use it within a class-based view such as `APIView` to serialize the queryset. Override the `get` method in the API view to include serialized data in the response, thus ensuring the result is formatted as JSON .

También podría gustarte