Criação de projeto backend API REST com Django REST Framework, utilizando ViewSets e Routers. Publicação (deploy) em cloud Amazon Web Services (AWS). Consumo da API REST com Postman. Pré-requisitos são conta gratuita no Postman e na AWS. Será utilizado serviço free tier AWS EC2 (gratuito). API REST conciste em CRUD de loft em Londres.
INSTALLED_APPS = [
# Outro conteúdo
"rest_framework",
"corsheaders",
"lofts",
]
MIDDLEWARE = [
# Outro conteúdo
"corsheaders.middleware.CorsMiddleware",
]
CORS_ALLOW_ALL_ORIGINS = True
REST_FRAMEWORK = {
"DEFAULT_RENDERER_CLASSES": [
"rest_framework.renderers.JSONRenderer",
],
"DEFAULT_PARSER_CLASSES": [
"rest_framework.parsers.JSONParser",
]
}
from django.db import models
class Loft(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=255)
address = models.CharField(max_length=50)
price = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return self.title
from rest_framework import serializers
from .models import Loft
class LoftSerializer(serializers.ModelSerializer):
class Meta:
model = Loft
fields = '__all__'
from rest_framework import viewsets
from .models import Loft
from .serializers import LoftSerializer
class LoftViewSet(viewsets.ModelViewSet):
queryset = Loft.objects.all()
serializer_class = LoftSerializer
from rest_framework.routers import DefaultRouter
from .views import LoftViewSet
router = DefaultRouter()
router.register(r'lofts', LoftViewSet, basename='loft')
urlpatterns = router.urls
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('lofts.urls')),
]
Publicar projeto (deploy) na cloud Amazon Web Services (AWS), gratuitamente, via recursos AWS free tier. Criação de instância EC2 (máquina Ubuntu CLI) contendo projeto Django REST API acima, baixado via GitHub. Passo a passo na AWS:
--- CRIAR INSTÂNCIA EC2 ---
EC2 / Instâncias / Executar instâncias
- Nome: ubuntuDjangoLoft
- AMI: Ubuntu Server (nível gratuito)
- Tipo: t3.micro (verificar se região é t2 ou t3 nível gratuito)
- Criar par de chaves:
-- Nome: keyDjangoLoft1
-- Tipo: RSA
-- Formato: conforme SO de sua máquina
Criar par de chaves / Baixar par de chaves
- Rede:
-- Atribuir IP público automaticamente: habilitar
-- Criar grupo de segurança (nome 'grupoDjangoLoft'), com regras de entrada:
--- Permitir tráfego Tipo HTTP, Intervalo de Portas 80, Origem qualquer lugar (0.0.0.0/0)
--- Permitir tráfego Tipo HTTPS, Intervalo de Portas 443, Origem qualquer lugar (0.0.0.0/0)
--- Permitir tráfego Tipo SSH, Intervalo de Portas 22, Origem qualquer lugar (0.0.0.0/0)
--- Permitir tráfego Tipo TCP, Intervalo de Portas 8000, Origem qualquer lugar (0.0.0.0/0)
- Armazenamento: 8GiB, com gp3 (padrão, nível gratuito)
Executar instância
Selecionar instância / Conectar
- Connection type: IP público
- Endereço IPv4 público: selecionar
Conectar
--- DENTRO DA INSTÂNCIA EC2 ---
Executar comandos:
- sudo apt update && sudo apt install python3-pip npm python3-venv git -y && sudo pip3 install django djangorestframework django-filter django-cors-headers --break-system-packages
- git clone https://github.com/mateusschwede/loft_api.git
- cd loft_api/loft_api/
- python3 manage.py migrate
- nano loft_api/settings.py (inserir conteúdo extra no arquivo):
ALLOWED_HOSTS = [
'ec2-54-233-2-156.sa-east-1.compute.amazonaws.com', // DNS pública da instância EC2
'18.231.73.21' // IPv4 pública da instância EC2
'localhost',
'127.0.0.1',
] // Ou troque o conteúdo para '*' se quiser permitir acesso total
- python3 manage.py runserver 0.0.0.0:8000 // ou com '&' no final, para funcionar em segundo plano
{
"title": "Loft Londrino UB Social 1",
"description": "Loft Londrino UB Social 1, com vista para London Tower",
"address": "Rua X, número yyy, Londres - UK",
"price": 862000.94
}
{
"title": "Loft Londrino UB Social ATUALIZADO",
"description": "Loft Londrino UB Social 1, com vista para London Tower",
"address": "Rua X, número yyy, Londres - UK",
"price": 862000.94
}
Elaborado por Mateus Schwede
ubsocial.github.io