mkdir nextjs-restframework-crud cd nextjs-restframework-crud
Requerimientos
- Nodejs
- Python
- Visual Studio Code
- Git
Creacion de la API en Django
mkdir backend cd backend
py -m venv venv .\venv\Scripts\activate pip install django djangorestframework
Iniciando proyecto Django
django-admin startproject taskapi .
python manage.py startapp tasks
Añade los modulos
Luego actualiza el archivo settings.py para añadir la apliacion Nueva:
INSTALLED_APPS = [
...
'tasks',
'rest_framework',
]
Añadiendo Modelo de Tareas
En el archivo tasks/models.py actualiza el codigo a lo siguiente:
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
done = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
python manage.py makemigrations
python manage.py migrate
Creando Serializers
Los serializers nos permiten convertir estructura de datos de python a json:
ve en tasks/serializers.py
from rest_framework import serializers
from .models import Task
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ('id', 'title', 'description', 'done', 'created_at')
read_only_fields = ('id', 'created_at')
Creando un ViewSet
crea en tasks/api.py:
from tasks.models import Task
from rest_framework import viewsets, permissions
from .serializers import TaskSerializer
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
permission_classes = [permissions.AllowAny]
serializer_class = TaskSerializer
include
Luego vamos a incluir las rutas en el archivo backend/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('tasks.urls'))
]
en tasks/urls.py:
from rest_framework import routers
from .api import TaskViewSet
router = routers.DefaultRouter()
router.register('api/tasks', TaskViewSet, 'tasks')
urlpatterns = router.urls
Añadir action
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import status
from tasks.models import Task
from rest_framework import viewsets, permissions
from .serializers import TaskSerializer
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
permission_classes = [permissions.AllowAny]
serializer_class = TaskSerializer
@action(detail=True, methods=['post'], permission_classes=[permissions.IsAuthenticated])
def done(self, request, pk=None):
"""
Marca una tarea como hecha.
"""
task = self.get_object()
task.done = True
task.save()
return Response({'status': 'task marked as done'}, status=status.HTTP_200_OK)
Creación del Frotend Nextjs
npx create-next-app