0% acharam este documento útil (0 voto)
11 visualizações

Rest Api

Enviado por

domingo ebo
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações

Rest Api

Enviado por

domingo ebo
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 3

REST API

Curso completo de Python com certificado do MEC e reuniões com professores.

Conheça nosso curso completo de Python e Django que te da acesso à:

Mais de 630 aulas

Agendamento de reuniões com professores

Reconhecido pelo MEC

Análises de códigos

Eventos entre alunos

Exercícios automáticos

E muito mais

Para quem participou da 4D4P terá um desconto especial, confira no link abaixo:

https://youtu.be/d_p7jAPDD8E

Passos iniciais
Primeiro devemos criar o ambiente virtual:

# Criar
# Linux
python3 -m venv venv
# Windows
python -m venv venv

Após a criação do venv vamos ativa-lo:

#Ativar
# Linux
source venv/bin/activate
# Windows
venv\Scripts\Activate

# Caso algum comando retorne um erro de permissão execute o código e tente novamente:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

Agora vamos fazer a instalação do Django e as demais bibliotecas:

pip install django


pip install pillow
pip install django-ninja

Vamos criar o nosso projeto Django:

django-admin startproject core .

Rode o servidor para testar:

python manage.py runserver

Crie o app usuario:

python manage.py startapp livros

Ative o auto-save

INSTALE O APP!
Crie uma URL para API:

from .api import api

path('api/', api.urls)

Crie um router para api em core/api.py:

from ninja import NinjaAPI


from livros.api import livros_router

api = NinjaAPI()
api.add_router('livros/', livros_router)

Livros
Crie as tabelas:

REST API 1
class Categorias(models.Model):
nome = models.CharField(max_length=50)

def __str__(self):
return self.nome

class Livros(models.Model):
streaming_choices = (('N', 'Netflix'), ('A', 'Amazon Prime'))
nome = models.CharField(max_length=50)
streaming = models.CharField(max_length=2, choices=streaming_choices)
nota = models.IntegerField(null=True, blank=True)
comentarios = models.TextField(null=True, blank=True)
categorias = models.ManyToManyField(Categorias)

def __str__(self):
return self.nome

Execute as migrações!!

Crie um Schema para criação dos livros:

from ninja import ModelSchema, Schema, Schema


from .models import Livros

class LivroSchema(ModelSchema):
class Meta:
model = Livros
fields = ['nome', 'streaming', 'categorias']

Crie um endpoint para criação do livro:

from ninja import Router


from .models import Livros, Categorias
from .schemas import LivroSchema

livros_router = Router()

@livros_router.post('/', response={200: LivroSchema})


def create_livro(request, livro_schema: LivroSchema):
nome = livro_schema.dict()['nome']
streaming = livro_schema.dict()['streaming']
categorias = livro_schema.dict()['categorias']
livro = Livros(nome=nome, streaming=streaming)
livro.save()

for categoria in categorias:


livro.categorias.add(Categorias.objects.get(id=categoria))

livro.save()
return livro

Desenvolva o endpoint para avaliar o livro:

@livros_router.put('/{livro_id}')
def avaliar_livro(request, livro_id: int, avaliacao_schema: AvaliacaoSchema):
comentarios = avaliacao_schema.dict()['comentarios']
nota = avaliacao_schema.dict()['nota']

livro = Livros.objects.get(id=livro_id)
livro.comentarios = comentarios
livro.nota = nota

livro.save()
return {'status': 'Avaliação realizada com sucesso'}

Construa o Schema para avaliação:

class AvaliacaoSchema(ModelSchema):
class Meta:
model = Livros
fields = ['nota', 'comentarios']

Permita a exclusão de livros:

@livros_router.delete('/{livro_id}')
def deletar_livro(request, livro_id: int):
livro = Livros.objects.get(id=livro_id)
livro.delete()

return livro_id

Sorteie um livro aleatoriamente:

@livros_router.get('/sortear/', response={200: LivroSchema, 404: dict})


def sortear_livro(request, filtros: Query[FiltrosSortear]):
nota_minima = filtros.dict()['nota_minima']

REST API 2
categoria = filtros.dict()['categorias']
reassistir = filtros.dict()['reassistir']

livros = Livros.objects.all()

if not reassistir:
livros = livros.filter(nota=None)

if nota_minima:
livros = livros.filter(nota__gte=nota_minima)
if categoria:
livros = livros.filter(categorias__id=categoria)

livro = livros.order_by('?').first()

if livros.count() > 0:
return 200, livro
else:
return 404, {'status': 'Livro não encontrado'}

Crie o Schema dos filtros

class FiltrosSortear(Schema):
nota_minima: int = None
categorias: int = None
reassistir: bool = False

REST API 3

Você também pode gostar