Simple REST API que permite registrar, activar usuarios y enviar emails (Python, Django, Celery, Redis, PostgreSql)
Necesitas tener Docker y Docker Compose instalado.
Crea un archivo .env
, pega el contenido de .env.example
y actualiza los valores del correo electrónico de ejemplo:
DEBUG=True
DJANGO_SECRET_KEY=gNCbtiguLq7fLcl8OzaNFfNB3tRaXLD5uOrW
CORS_ALLOWED_ORIGINS=*
DATABASE_URL=postgres://postgres:postgres@db:5432/postgres
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_HOST_USER=mail@mail.com
EMAIL_HOST_PASSWORD=mysupersecretpassword
EMAIL_USE_TLS=True
ACCOUNT_ACTIVATION_URL=https://www.confortdeporvida.cl/account-activation/
Migra la base de datos, crea el super usuario y ejecuta el proyecto
$ docker-compose run app python manage.py migrate
$ docker-compose run app python manage.py createsuperuser
$ docker-compose up
Si lo deseas, puedes generar usuarios en masa con el siguiente comando
$ docker-compose run app python manage.py seed users --number=1000
Es probable que durante la ejecución de este comando se genere el error:
DETAIL: Key (username)=(umyers) already exists.
. Simplemente vuelve a ejecutarlo hasta obtener un número considerable de usuarios que permitan probar el desempeño de la solución.
http://127.0.0.1:8000/api
POST /accounts/register/
Campo | Tipo | Información adicional |
---|---|---|
username | String: formData | Requerido. 150 caracteres |
String: formData | Requerido. 60 caracteres | |
bio | String: formData | Opcional. 500 caracteres |
phone | String: formData | Requerido. 15 caracteres |
address | String: formData | Requerido. 100 caracteres |
first_name | String: formData | Requerido. 150 caracteres |
last_name | String: formData | Requerido. 150 caracteres |
{
"id": 2,
"username": "username",
"email": "username@username.com",
"first_name": "name",
"last_name": "last_name",
"phone": "7842934",
"address": "Las Camelias 123",
"bio": "Amo el confort"
}
La cuenta del usuario no será tomada en cuenta para el concurso hasta después de su validación y activación.
{
"username": ["This field is required."],
"email": ["user with this email address already exists."]
}
Al momento de registrarse, se enviará un correo electrónico a la dirección del usuario con el enlace de activación en el siguiente formato:
http://fontend-url/account-activation/?token=superweirdtoken&user_id=22
El desarrollador frontend deberá capturar el token y el user_id desde los parámetros de la url y enviar una nueva petición para activar la cuenta del usuario:
PUT /accounts/activate/{user_id}/?token={token}
Campo | Tipo | Información adicional |
---|---|---|
user_id | Integer: path | Requerido. |
token | String: query | Requerido. |
password | String: formData | Requerido. 128 caracteres |
password2 | String: formData | Requerido. 128 caracteres |
{
"password": "mysupersecretpassword",
"password2": "mysupersecretpassword"
}
{
"username": "username",
"email": "username@username.com",
"is_active": true
}
{
"token": "Token is missing or invalid."
}
{
"password": ["Password fields didn't match."]
}
Solo los administradores pueden acceder a este endpoint. El sorteo se llevará a cabo entre los usuarios con cuenta activa, excluyendo staff y super usuarios.
GET /contest-winner/
[
{
"id": 2,
"email": "username@username.com",
"first_name": "name",
"last_name": "last_name",
"address": "Las Camelias 123",
"phone": "7842934",
"bio": "Amo el confort"
}
]
{
"detail": "Authentication credentials were not provided."
}
{
"detail": "Invalid username/password."
}
{
"detail": "You do not have permission to perform this action."
}