Skip to content

API REST sencilla con Django y DRF que implementa autenticación de usuarios mediante Tokens. Incluye registro, login y perfil protegido. Código con ejemplos en Function-Based Views y Class-Based Views, ideal para aprender autenticación en DRF.

License

Notifications You must be signed in to change notification settings

alexisnlh/DRF-Token-Simple

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DRF-Token-Simple

API REST simple desarrollada con Django y Django REST Framework que implementa autenticación de usuarios mediante Tokens usando el módulo authtoken integrado en DRF.

🎓 Proyecto basado en el tutorial de Fazt Code

📋 Descripción

Este proyecto implementa un sistema de autenticación completo que incluye registro de usuarios, login y obtención del perfil de usuario. La particularidad es que presenta dos implementaciones diferentes del mismo sistema:

  • Function-Based Views (func): Implementación usando vistas basadas en funciones con decoradores.
  • Class-Based Views (class): Implementación usando vistas basadas en clases (APIView).

Ambas implementaciones demuestran cómo lograr los mismos resultados con diferentes enfoques de programación en Django REST Framework.

📋 Tabla de Contenidos

✨ Características

  • ✅ Registro de usuarios
  • ✅ Autenticación mediante login
  • ✅ Generación automática de tokens al registrarse
  • ✅ Protección de endpoints con autenticación por token
  • ✅ Consulta de perfil de usuario autenticado
  • ✅ Dos estilos de implementación (funciones vs clases)
  • ✅ Código ampliamente comentado para facilitar el aprendizaje
  • ✅ Base de datos SQLite incluida

🛠️ Tecnologías

  • Python 3.x
  • Django
  • Django REST Framework
  • SQLite
  • Token Authentication (DRF authtoken)

📦 Instalación

1. Clonar el repositorio

git clone https://github.com/alexisnlh/DRF-Token-Simple.git
cd drf-token-simple

2. Crear entorno virtual

python -m venv venv

# En Windows
venv\Scripts\activate

# En Linux/Mac
source venv/bin/activate

3. Instalar dependencias

pip install django djangorestframework

4. Aplicar migraciones

python manage.py migrate

5. Ejecutar el servidor

python manage.py runserver

El servidor estará disponible en http://127.0.0.1:8000/

⬆ back to top

🔌 Endpoints

Aplicación func (Function-Based Views)

Método Endpoint Descripción Autenticación
POST /func/register Registro de usuarios No requerida
POST /func/login Login y obtención de token No requerida
GET /func/profile Perfil del usuario autenticado Token requerido

Aplicación class (Class-Based Views)

Método Endpoint Descripción Autenticación
POST /class/register Registro de usuarios No requerida
POST /class/login Login y obtención de token No requerida
GET /class/profile Perfil del usuario autenticado Token requerido

⬆ back to top

📝 Ejemplos de Uso

Registro de Usuario

POST /func/register
Content-Type: application/json

{
    "username": "usuario_ejemplo",
    "email": "usuario@example.com",
    "password": "contraseña_segura"
}

Respuesta:

{
    "token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b",
    "user": {
        "id": 1,
        "username": "usuario_ejemplo",
        "email": "usuario@example.com"
    }
}

Login

POST /func/login
Content-Type: application/json

{
    "username": "usuario_ejemplo",
    "password": "contraseña_segura"
}

Respuesta:

{
    "token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b",
    "user": {
        "id": 1,
        "username": "usuario_ejemplo",
        "email": "usuario@example.com"
    }
}

Obtener Perfil (Requiere Token)

GET /func/profile
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

Respuesta:

{
    "id": 1,
    "username": "usuario_ejemplo",
    "email": "usuario@example.com"
}

⬆ back to top

🧪 Probando con cURL

Registro

curl -X POST http://127.0.0.1:8000/func/register \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","email":"test@example.com","password":"test1234"}'

Login

curl -X POST http://127.0.0.1:8000/func/login \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","password":"test1234"}'

Profile

curl -X GET http://127.0.0.1:8000/func/profile \
  -H "Authorization: Token TU_TOKEN_AQUI"

⬆ back to top

📂 Estructura del Proyecto

drf-token-simple/
├── func/                   # App con Function-Based Views
│   ├── views.py           # Vistas con decoradores
│   └── urls.py
├── class/                  # App con Class-Based Views
│   ├── views.py           # Vistas con APIView
│   └── urls.py
├── server/              # Configuración principal
│   ├── settings.py
│   └── urls.py
├── db.sqlite3             # Base de datos
├── JSON_example.txt       # Ejemplos de peticiones JSON
└── manage.py

🔐 Seguridad

  • Los tokens se generan automáticamente al crear un usuario
  • Las contraseñas se almacenan hasheadas en la base de datos
  • Los endpoints de perfil están protegidos y requieren autenticación
  • Se valida que el usuario exista antes de generar tokens

📚 Aprendizaje

Este proyecto es ideal para:

  • Aprender la diferencia entre Function-Based Views y Class-Based Views
  • Entender cómo implementar autenticación por token en DRF
  • Comprender el flujo de registro, login y autorización
  • Ver código comentado y documentado para facilitar el aprendizaje

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

👤 Autor

Alexis NLH

🙏 Agradecimientos

  • Fazt Code por el tutorial original
  • Comunidad de Django REST Framework

⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub

⬆ back to top

About

API REST sencilla con Django y DRF que implementa autenticación de usuarios mediante Tokens. Incluye registro, login y perfil protegido. Código con ejemplos en Function-Based Views y Class-Based Views, ideal para aprender autenticación en DRF.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages