Esta guía muestra cómo crear una API RESTful usando Django, Django REST Framework (DRF) y MySQL para gestionar información de personas (nombre, edad, sexo, nacionalidad, profesión y hobby), implementando un CRUD completo, claro y escalable.
- Python 3.x
- Django
- Django REST Framework
- MySQL
Antes de empezar, asegúrate de tener:
- Python 3.x
- MySQL
- pip
pip install virtualenv
virtualenv env
virtualenv --versionpython -m venv env.\env\Scripts\activatesource env/bin/activatePara desactivar:
deactivatepip install Django djangorestframework mysqlclientVersión específica (opcional):
pip install Django==4.2.4Verificar instalación:
python -m django --versiondjango-admin startproject project_core .El
.crea el proyecto en el directorio actual.
python manage.py runserver 8500Abrir 👉 http://127.0.0.1:8500
python manage.py startapp api_personasINSTALLED_APPS = [
...
'rest_framework',
'api_personas',
]DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'api_django_rest_framework',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}Crear la base de datos en MySQL:
CREATE DATABASE api_django_rest_framework;class Persona(models.Model):
GENEROS = (
("M", "Masculino"),
("F", "Femenino"),
("O", "Otro"),
)
nombre = models.CharField(max_length=100)
edad = models.IntegerField()
sexo = models.CharField(max_length=5, choices=GENEROS)
nacionalidad = models.CharField(max_length=100)
profesion = models.CharField(max_length=100)
hobby = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "tbl_personas"
ordering = ['-created_at']
def __str__(self):
return self.nombrepython manage.py makemigrations
python manage.py migratepython manage.py createsuperuserAcceder al admin 👉
http://127.0.0.1:8500/admin
Registrar modelo:
admin.site.register(Persona)from rest_framework import serializers
from .models import Persona
class PersonaSerializer(serializers.ModelSerializer):
class Meta:
model = Persona
fields = '__all__'from rest_framework.generics import ListCreateAPIView
from .models import Persona
from .serializers import PersonaSerializer
class PersonaListCreate(ListCreateAPIView):
queryset = Persona.objects.all()
serializer_class = PersonaSerializerfrom django.urls import path
from .views import PersonaListCreate
urlpatterns = [
path('', PersonaListCreate.as_view(), name='personas'),
]Conectar al proyecto:
urlpatterns = [
path('admin/', admin.site.urls),
path('api/personas/', include('api_personas.urls')),
]| Método | Endpoint | Acción |
|---|---|---|
| GET | /api/personas/ |
Listar personas |
| POST | /api/personas/ |
Crear persona |
| PUT | /api/personas/{id}/ |
Actualizar |
| DELETE | /api/personas/{id}/ |
Eliminar |
- Usa Generics para reducir código repetido
- DRF devuelve JSON, no HTML
- Puedes mejorar usando ViewSets + Routers
- Ideal agregar JWT y permisos en producción
- 🔗 https://www.django-rest-framework.org/
- 🔗 https://piptocode.github.io/manuals/frameworks/djangorest.html
Si te sirvió:
- ⭐ Dale star al repo
- ☕ Invita un café
- 📢 Comparte el proyecto
