La idea genérica sería ir haciendo las peticiones en Postman y ofrecer los datos desde la API Rest utilizando django. Las peticiones son:
GET
POST
PUT (Falta crearlo en Postman)
DELETE
Investigar para automatizar pruebas con Postman y así comprobar si todas las peticiones funcionan correctamente.
Definir Roles en la API Rest. Limitar las acciones en función del usuario:
Profesor (puede realizar todas las acciones)
Teleoperador
Documentación django:
Para alguna de estas partes del proyecto necesitamos conocer los ficheros que vamos a tocar. Estos son:
1. urls.py
Contiene las urls de la aplicación a las que va a devolver respuesta. Dentro de este fichero podemos ver:
router = routers.DefaultRouter(trailing_slash=False)
router.register(r'users', views_rest.UserViewSet)
...
router.register(r'persona', views_rest.Persona_ViewSet)
urlpatterns = [
...
path('api-rest/', include(router.urls)),
...
]
De esta forma vamos a poder recibir peticiones de la siguiente forma:
http://localhost:8000/api-rest/users
http://localhost:8000/api-rest/persona
La respuesta sobre las peticiones serán devuelta por las clases UserViewSet y Persona_ViewSet (para el ejemplo que estamos tratando) definidas en el fichero view_rest
2. serializers.py
En este fichero podemos encontrar clases que permiten devolver instancias de objetos, además se puede indicar el modelo, campos y profundidad (esto sirve si hay relaciones entre objetos, ejemplo Persona con dirección).
class Persona_Serializer(serializers.ModelSerializer):
class Meta:
model = Persona
fields = '__all__' #Indica todos los campos
depth = 1
3. utils.py
Encontramos definidas dos funciones que nos permite obtener los parámetros pasados por URL sobre una petición GET y organizarlos para poder buscar en base de datos las coincidencias de todos o algunos estos parámetros sobre la base de datos.
En el caso de que queramos que la búsqueda pueda coincidir con TODOS de los valores
def getQueryAnd(params):
En el caso de que queramos que la búsqueda pueda coincidir con ALGUNO de los valores
def getQueryOr(params):
4. view_rest.py
Como estructura del fichero podemos encontrar la siguiente línea en la cual se define la clase, el conjunto de valores a devolver y la clase que lo serializa, opcionalmente podemos indicar los permisos para la petición.
class Persona_ViewSet(viewsets.ModelViewSet):
"""
API endpoint para las empresas
"""
queryset = Persona.objects.all()
serializer_class = Persona_Serializer
#permission_classes = [permissions.IsAdminUser] # Si quieriéramos para todos los registrados: IsAuthenticated]
Adicionalmente podemos definir el compartimiento sobre algunas peticiones como son GET, POST, PUT…
A viewset that provides default create(), retrieve(), update(),partial_update(), destroy() and list() actions.
Algunos ejemplos de personalización son:
Obtenemos el listado de personas filtrado por los parámetros GET
def list(self, request, *args, **kwargs):
# Hacemos una búsqueda por los valores introducidos por parámetros
query = getQueryAnd(request.GET)
if query:
queryset = Persona.objects.filter(query)
# En el caso de que no hay parámetros y queramos devolver todos los valores
else:
queryset = self.get_queryset()
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
# Creamos una persona con por POST
def create(self, request, *args, **kwargs):
# Comprobamos si los datos se introducen para una dirección ya existente,
id_direccion=request.data.get("id_direccion")
# En el caso de ser una dirección nueva
if id_direccion is None:
# Obtenemos los datos de dirección y los almacenamos
direccion_serializer = Direccion_Serializer(data=request.data.get("direccion"))
if direccion_serializer.is_valid():
direccion = direccion_serializer.save()
else:
return Response("Error: direccion")
# en el caso de ser una dirección existente
else:
direccion = Direccion.objects.get(pk=id_direccion)
# Creamos la persona con la dirección y la devolvemos
return Response(Assignar_Persona_Direccion(request.data, direccion).data)
La idea genérica sería ir haciendo las peticiones en Postman y ofrecer los datos desde la API Rest utilizando django. Las peticiones son:
Investigar para automatizar pruebas con Postman y así comprobar si todas las peticiones funcionan correctamente.
Definir Roles en la API Rest. Limitar las acciones en función del usuario:
Documentación django:
Para alguna de estas partes del proyecto necesitamos conocer los ficheros que vamos a tocar. Estos son:
1. urls.py Contiene las urls de la aplicación a las que va a devolver respuesta. Dentro de este fichero podemos ver:
2. serializers.py En este fichero podemos encontrar clases que permiten devolver instancias de objetos, además se puede indicar el modelo, campos y profundidad (esto sirve si hay relaciones entre objetos, ejemplo Persona con dirección).
3. utils.py Encontramos definidas dos funciones que nos permite obtener los parámetros pasados por URL sobre una petición GET y organizarlos para poder buscar en base de datos las coincidencias de todos o algunos estos parámetros sobre la base de datos.
En el caso de que queramos que la búsqueda pueda coincidir con TODOS de los valores
def getQueryAnd(params):
En el caso de que queramos que la búsqueda pueda coincidir con ALGUNO de los valores
def getQueryOr(params):
4. view_rest.py Como estructura del fichero podemos encontrar la siguiente línea en la cual se define la clase, el conjunto de valores a devolver y la clase que lo serializa, opcionalmente podemos indicar los permisos para la petición.
Adicionalmente podemos definir el compartimiento sobre algunas peticiones como son GET, POST, PUT…
A viewset that provides default
create()
,retrieve()
,update()
,partial_update()
,destroy()
andlist()
actions.Algunos ejemplos de personalización son:
Obtenemos el listado de personas filtrado por los parámetros GET