Lucas Simon

Web Developer. lucassrod@gmail.com

Série API em Flask - Parte 9 - Buscando usuários

Esse capítulo iremos buscar um usuário pelo seu id. É um dos recursos mais simples que teremos nessa API.

Para entendimento, segue os capítulos que serão abordados.

O repositório com todo o código fonte esta aqui. Os capítulos estão em branches.

Configurando a rota

Em nosso arquivo apps/api.py vamos adicionar nosso recurso:


# Importar o recurso
from apps.users.resources_admin import AdminUserPageList, AdminUserResource


def configure_api(app):
    # ...

    # rotas para os admins
    api.add_resource(AdminUserPageList, '/admin/users/<int:page_id>')
    api.add_resource(AdminUserResource, '/admin/users/<string:user_id>')
    #...

Observe que colocamos um parametro nomeado na url <string:user_id>. Ele é usado no recurso AdminUserResource que será criado logo abaixo.

O recurso AdminUserResource

Vamos criar esse novo recurso AdminUserResource o qual iremos implementar os métodos GET, PUT, DELETE.

# -*- coding: utf-8 -*-

# Flask
from flask import request

# Third
from flask_restful import Resource
from mongoengine.errors import FieldDoesNotExist

# Apps
from apps.responses import resp_ok, resp_exception
from apps.messages import MSG_RESOURCE_FETCHED_PAGINATED, MSG_RESOURCE_FETCHED

# Local
from .models import User
from .schemas import UserSchema


class AdminUserPageList(Resource):
    # ...

class AdminUserResource(Resource):

    def get(self, user_id):
        result = None
        schema = UserSchema()

        try:
            # Buscando usuário por id
            user = User.objects.get(id=user_id)

        except FieldDoesNotExist as e:
            return resp_exception('Users', description=e.__str__())

        except Exception as e:
            return resp_exception('Users', description=e.__str__())

        result = schema.dump(user)

        return resp_ok(
            'Users', MSG_RESOURCE_FETCHED.format('Usuários'),  data=result.data
        )

Testando

$ http -v GET 0.0.0.0:5000/admin/users/5bbeaf52fb5d1b0a32466c93
GET /admin/users/5bbeaf52fb5d1b0a32466c93 HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: 0.0.0.0:5000
User-Agent: HTTPie/0.9.8



HTTP/1.0 200 OK
Content-Length: 253
Content-Type: application/json
Date: Sat, 13 Oct 2018 01:53:03 GMT
Server: Werkzeug/0.14.1 Python/3.6.5

{
    "data": {
        "active": false,
        "cpf_cnpj": "",
        "email": "teste@teste.com",
        "full_name": "teste 1234",
        "id": "5bbeaf52fb5d1b0a32466c93"
    },
    "message": "Usuários retornado(a).",
    "resource": "Users",
    "status": 200
}

Seguindo o capítulo anterior implementamos de forma simples uma busca de um usuário por id. Logo vamos fechar o CRUD de usuários e partir para a autenticação. Abraços.

Próximo artigo: Editando um usuário