No description
Find a file
2026-05-03 00:45:48 +00:00
journal_backend agregadas configuraciones cors 2026-05-02 12:56:55 -06:00
.gitignore Initial commit 2026-05-02 06:40:08 +00:00
LICENSE Initial commit 2026-05-02 06:40:08 +00:00
README.md Update README.md 2026-05-03 00:45:48 +00:00

cabal_api

Paso 1

Configuración del proyecto

  • El entorno virtual se utiliza para evitar mezclar las librerias del proyecto de DJango con las librerias de sistema.
pip3 install --user virtualenv

virtualenv vjournal # Crear el entorno virtual
source vjournal/bin/activate # Habilitar el entorno virtual
pip3 install Django djangorestframework django-cors-headers
django-admin startproject journal_backend
cd journal_backend
django-admin startapp app_ejemplo

python manage.py makemigrations
python manage.py migrate
python manage.py upgrade

Paso 1.1

Registrar la app en journal_backend/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'app_ejemplo'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ALLOWED_ORIGINS = [
    'http://localhost:9000',
]

APPEND_SLASH = True


Paso 2

Creación del modelo en app_ejemplo/models.py

from django.db import models


class Entry(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(blank=True)

    class Meta:
        ordering = ['title']
        verbose_name = 'Entry'
        verbose_name_plural = 'Entries'

    def __str__(self):
        return self.title

Paso 2.1

Ejecutar las migraciónes para que sea creada la base de datos SQLite

python3 manage.py makemigrations
python3 manage.py migrate

Paso 3

Crear la vista en app_ejemplo/views.py

from django.shortcuts import render
from django.shortcuts import get_object_or_404
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Entry
# Create your views here.

class EntryAPIView(APIView):

    def post(self, request):
        entry = Entry.objects.create(
            title=request.data.get('title', ''),
            description=request.data.get('description', ''),
        )
        return Response(
            {'id': entry.id, 'title': entry.title, 'description': entry.description},
            status=status.HTTP_201_CREATED,
        )
    
    def get(self, request):
        entries = Entry.objects.all()
        data = []
        for e in entries:
            data.append({'id': e.id, 'title': e.title, 'description': e.description})
        return Response(data)

    def put(self, request, pk):
        entry = get_object_or_404(Entry, pk=pk)
        entry.title = request.data.get('title', '')
        entry.description = request.data.get('description', '')
        entry.save()
        return Response(
            {'id': entry.id, 'title': entry.title, 'description': entry.description}
        )

    def delete(self, request, pk):
        entry = get_object_or_404(Entry, pk=pk)
        entry.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

Paso 4

Registrar los url en app_ejemplo/urls.py

from django.urls import path

from .views import EntryAPIView

app_name = 'app_ejemplo'

urlpatterns = [
    path('entries/', EntryAPIView.as_view()),
    path('entries/<int:pk>/', EntryAPIView.as_view()),
]

Paso 5

Registrar los url a nivel proyecto journal_backend/urls.py


from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('app_ejemplo.urls', namespace='app_ejemplo')),
]

Paso 5.2

Ejecutar el servidor de desarrollo

python3 manage.py runserver

Paso 6

Probar los endpoint

# Crear una entrada de bitacora
curl -s -X POST "http://127.0.0.1:8000/api/entries/" \
  -H "Content-Type: application/json" \
  -d '{"title":"ticket 123","description":"actualización de registro dns 123.ejemplo.com"}'

# Obtener las entradas
curl -s "http://127.0.0.1:8000/api/entries/"

# Actualizar la entrada

curl -s -X PUT "http://127.0.0.1:8000/api/entries/1/" \
  -H "Content-Type: application/json" \
  -d '{"title":"ticket 123","description":"actualización de registro dns 123.ejemplo.biz"}'

# Borrar la entrada 

curl -s -o /dev/null -w "HTTP %{http_code}\n" -X DELETE "http://127.0.0.1:8000/api/entries/1/"