Crear una API en Django con PostgreSQL y consumirla desde PHP
En esta guía aprenderás paso a paso y desde cero a construir una API REST profesional utilizando Django y PostgreSQL, y a consumirla desde un frontend en PHP, todo sobre Ubuntu 22.04.
Este contenido está pensado para principiantes, estudiantes y desarrolladores que desean comprender cómo se conectan el backend y el frontend en un entorno real.
✅ Instalación de PostgreSQL
✅ Instalación de Django en Ubuntu 22.04
✅ Configuración de Django + PostgreSQL
✅ Creación de API básica con Django REST Framework
✅ Consumo de la API desde PHP (frontend)
Introducción: En este video aprenderás a instalar PostgreSQL, Django y a crear una API básica que luego consumiremos desde PHP, todo desde cero en Ubuntu 22.04.
1. Instalación de PostgreSQL
Actualizar el Sistema Operativo
sudo apt update && sudo apt upgrade -y
Instalar PostgreSQL
sudo apt install postgresql postgresql-contrib -y
Ingresamos desde el terminal
sudo -i -u postgres
psql
Crear base de datos y usuario
CREATE DATABASE apidjango;
CREATE USER usuarioapi WITH PASSWORD '12345';
ALTER ROLE usuarioapi SET client_encoding TO 'utf8';
ALTER ROLE usuarioapi SET default_transaction_isolation TO 'read committed';
ALTER ROLE usuarioapi SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE apidjango TO usuarioapi;
\q
exit
Instalar Python y Django
Instalar dependencias
sudo apt install python3 python3-pip python3-venv -y
Crear entorno virtual y activar entorno
python3 -m venv venv
source venv/bin/activate
Instalar Django, REST Framework, Conexión con PostgreSQL
pip install django djangorestframework psycopg2-binary
Instalar Visual Studio Code
sudo snap install code –classic
Crear Proyecto Django y aplicación
django-admin startproject backend
cd backend
python manage.py startapp personas
Abrir settings.py y añadir el proyecto
INSTALLED_APPS = [
'rest_framework',
'personas',
]
Conectar Django con PostgreSQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'apidjango',
'USER': 'usuarioapi',
'PASSWORD': '12345',
'HOST': 'localhost',
'PORT': '5432',
}
}
Migrar los modelos iniciales.
python manage.py migrate
Crear super usuario
python manage.py createsuperuser
Crear Modelo de Datos: models.py
from django.db import models
# Create your models here.
class Persona(models.Model):
nombre = models.CharField(max_length=100)
apellido = models.CharField(max_length=100)
edad = models.IntegerField()
email = models.EmailField()
Migraciones:
python manage.py makemigrations
python manage.py migrate
Agregamos al admin de django
from .models import Persona
# Register your models here.
admin.site.register(Persona)
Crear Serializer: serializers.py
El archivo serializers.py sirve para convertir datos del modelo Django en JSON y también para convertir JSON en datos que se guardan en la base de datos.
Es el puente entre:
- Base de datos (Modelos Django)
- API REST (JSON)
- Frontend (PHP, JS, React, etc.)
from rest_framework import serializers
from .models import Persona
class PersonaSerializer(serializers.ModelSerializer):
class Meta:
model = Persona
fields = '__all__'
Crear Vista de la API: views.py
-
Convierte una función normal de Django en una vista de API REST
-
Define qué métodos HTTP acepta (GET, POST, PUT, DELETE)
-
Permite acceder a la base de datos
-
Consultar, crear, editar y eliminar registros
-
Convierte objetos Python en JSON
-
Valida datos que vienen del frontend
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Persona
from .serializers import PersonaSerializer
# Create your views here.
@api_view(['GET'])
def lista_personas(request):
personas = Persona.objects.all()
serializer = PersonaSerializer(personas, many=True)
return Response(serializer.data)
Configurar URLs: personas/urls.py
from django.urls import path
from .views import lista_personas
urlpatterns = [
path('personas/', lista_personas),
]
backend/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('personas.urls')),
]
Probar la API
python manage.py runserver
Navegador:
http://127.0.0.1:8000/api/personas/
Instalación del Frontend
Instalar el servidor web apache
sudo apt install apache2 -y
Instalar php
sudo apt install php libapache2-mod-php php-cli -y
Comprobamos en el navegador
http://localhost
Consumir la API desde PHP : index.php
- $url -> Dirección de la API
- file_get_contents() -> Consume la API
- json_decode() -> Convierte JSON a array
<?php
$url = "http://127.0.0.1:8000/api/personas/";
$response = file_get_contents($url);
$data = json_decode($response, true);
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Listado de Personas</title>
<style>
body {
font-family: Arial, Helvetica, sans-serif;
background-color: #f4f6f8;
padding: 40px;
}
h1 {
text-align: center;
color: #2c3e50;
margin-bottom: 20px;
}
table {
width: 100%;
max-width: 900px;
margin: auto;
border-collapse: collapse;
background: #ffffff;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
thead {
background-color: #2d89ef;
color: #ffffff;
}
th, td {
padding: 12px 15px;
text-align: center;
border-bottom: 1px solid #e0e0e0;
}
tr:nth-child(even) {
background-color: #f2f6fc;
}
tr:hover {
background-color: #e8f0fe;
}
th {
text-transform: uppercase;
font-size: 14px;
letter-spacing: 0.5px;
}
</style>
</head>
<body>
<h1>📋 Listado de Personas</h1>
<table>
<thead>
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Edad</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php foreach ($data as $persona): ?>
<tr>
<td><?= htmlspecialchars($persona['nombre']) ?></td>
<td><?= htmlspecialchars($persona['apellido']) ?></td>
<td><?= htmlspecialchars($persona['edad']) ?></td>
<td><?= htmlspecialchars($persona['email']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
</html>