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.
Capítulo 1: Introdução, configuração e Hello World
Capítulo 2: Organizando as dependências e requerimentos
Capítulo 3: Configurando o pytest e nosso primeiro teste
Capítulo 4: Configurando o Makefile
Capítulo 5: Adicionando o MongoDB
Capítulo 6: Criando e testando o modelo de usuários
Capítulo 7: Criando usuários
Capítulo 8: Listando usuários
Capítulo 9: Buscando usuários Estamos aqui
Capítulo 10: Editando um usuário
Capítulo 11: Deletando um usuário
Capítulo 12: Autênticação por JWT
Capítulo 13: Criando um container Docker
Capítulo 14: Arquivos de configuração para Deploy na Digital Ocean
Capítulo 15: Automatizando o processo de deploy com Fabric
Capítulo 16: CI e CD com Jenkins, Python, Flask e Fabric
Capítulo 17: Utilizando o RabbitMQ com Flask e Sendgrid para enviar e-mails de boas vindas e ativar a conta do usuário
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