Desarrollar una aplicación backend robusta y escalable utilizando Django que integre una interfaz de administrador intuitiva para la gestión eficiente de datos y funcionalidades junto con un REST API completo que facilite la comunicación con las aplicaciones cliente de tal forma que garantice la seguridad, el rendimiento y la extensibilidad del sistema.
Desde la línea de comandos
python -m venv environment
environment\Scripts\activate
Desde la línea de comandos
pip install -r requirements.txt
pip install firebase-admin djangorestframework
Abra el proyecto con VSCode, con:
code .
Levante el servidor, con:
python manage.py runserver
backend/
├── backend/
├── main/
├── static/
└── templates/
├── ....
└── keys/ <!-- clave -->
└──landing-key.json
En el servicio de Realtime Database, copie la URL de referencia.
(STOP 1) Edite el archivo backend/settings.py, con:
...
from ... import Path
# Importe los módulos firebase_admin y credentials
import firebase_admin
from firebase_admin import credentials
...
# Coloque la ruta relativa al archivo con la clave privada
FIREBASE_CRED = credentials.Certificate("keys/landing-key.json")
# Inicialice la conexión con el Realtime Database con la clave privada y la URL de referencia
firebase_admin.initialize_app(FIREBASE_CRED, {
'databaseURL': 'https://landing-XXXXX-default-rtdb.firebaseio.com/'
})
Desde la línea de comandos
api
, con: python manage.py startapp api
Edite el archivo backend/settings.py, con:
INSTALLED_APPS = [
...
'rest_framework',
'api',
]
Edite el archivo backend/urls.py, con:
...
urlpatterns = [
...
path('api/', include('api.urls')),
]
Cree y modifique el archivo api/urls.py, con:
from django.urls import path
from . import views
urlpatterns = [
path('v1/landing/', views.LandingAPI.as_view(), name='firebase_resources' ),
]
Edite el archivo api/views.py, con:
class-based view
). Incluya los atributos name y collection_name (nombre de la colección en Realtime Database). ...
# Create your views here.
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from datetime import datetime
from firebase_admin import db
class LandingAPI(APIView):
name = 'Landing API'
# Coloque el nombre de su colección en el Realtime Database
collection_name = 'COLLECTION_NAME_REALTIME_DATABASE'
Desde la línea de comandos
python manage.py runserver
(STOP 2) Revise los cambios en el navegador para las URLs:
Edite el archivo api/views.py, con:
...
class LandingAPI(APIView):
...
def get(self, request):
# Referencia a la colección
ref = db.reference(f'{self.collection_name}')
# get: Obtiene todos los elementos de la colección
data = ref.get()
# Devuelve un arreglo JSON
return Response(data, status=status.HTTP_200_OK)
(STOP 3 - I) Revise los cambios en el navegador para las URLs:
(STOP 3 - II) Desde una nueva línea de comandos
cURL
, con: curl -X GET http://127.0.0.1:8000/api/v1/landing/
Edite el archivo api/views.py, con:
...
class LandingAPI(APIView):
...
def post(self, request):
# Referencia a la colección
ref = db.reference(f'{self.collection_name}')
current_time = datetime.now()
custom_format = current_time.strftime("%d/%m/%Y, %I:%M:%S %p").lower().replace('am', 'a. m.').replace('pm', 'p. m.')
request.data.update({"saved": custom_format })
# push: Guarda el objeto en la colección
new_resource = ref.push(request.data)
# Devuelve el id del objeto guardado
return Response({"id": new_resource.key}, status=status.HTTP_201_CREATED)
(STOP 4 - I) Revise los cambios en el navegador para las URLs:
{
"email": "usuarioYY@gmail.com"
}
(STOP 4 - II) Desde una nueva línea de comandos
cURL
, con: curl -X POST -H "Content-Type: application/json" -d "{\"email\":\"usuarioXX@gmail.com\"}" http://127.0.0.1:8000/api/v1/landing/
En la línea de comandos
pip freeze > requirements.txt
deactivate
Agregue la carpeta keys/ en el archivo .gitignore
...
# Keys
keys/
Versione local y remotamente.
#REST #API what is it?
— Terrasoft Ltd (@Terrasoft_ltd) December 6, 2023
Representational State Transfer
This means that when a #client requests a resource using a REST API, the #server transfers back the current state of the resource in a standardized representation pic.twitter.com/xCFXw9cQFZ
api, class-based view, cURL