No description
- Python 100%
| journal_backend | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
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/"