El chino de la tienda de al lado de mi casa se llama Li, no podría utilizar nuestra aplicación 😦
Jaja
Bienvenida
Todo lo que aprenderás sobre Django
Cimientos
Arquitectura de una aplicación
The Twelve-Factor App
Codebase: Settings modular
Codebase: Dependencias y archivos de docker
Codebase: Docker
Setups alternativos
Modelos
Herencia de modelos
Proxy models
App de usuarios
Organizando modelos en un paquete de Django
Creando el modelo de perfil de usuario
Solución del reto: arreglando la migración de users a user
Aplicación y modelo de círculos
Migraciones y admin de círculos
Introducción a Django REST Framework
Aprende cómo construir tu propio API con Django Rest Framework
Vistas, URLs y Parsers de DRF
Serializers
Buenas prácticas para el diseño de un API REST
Request, response, renderers y parsers
Real DRF
Autenticación y tipos de autenticación
APIView
Creando el token de autorización
User sign up
Limitar login a usuarios con cuenta verificada
Configurar envío de email
Instalar PyJWT y generar tokens
Verificar cuenta usando JWT
Actualizar modelo de circle (membership)
Crear CircleViewSet
Añadiendo autorización y paginación
Creación de circulos
Update de círculo, custom permissions y DRF Mixins
Migración de vistas de usuarios a ViewSets
Detalle de usuario
Update profile data
List members - Recursos anidado
Retrieve destroy member
Modelo de invitaciones y manager
Obtener invitaciones de un miembro
Unirse a grupo
Filtrado
App de rides y modelos
Implementar la publicación de un ride
Validación de campos de un serializer
Listado de rides
Editar un ride
Unirse a viaje
Terminar viaje
Calificar viaje
Tareas asíncronas
¿Qué es Celery?
Creando tarea asíncrona
Creando tarea periódica
Testing
Python unittest y Django TestCase
DRF APITestCase
Django Admin
Admin actions: Modificar datos de un query
Admin actions: Regresando una respuesta HTTP
Deployment
Instalación de la aplicación
Configuración del dominio en Mailgun y del Bucket en Amazon S3
Configuración final de Docker Container usando Supervisor
Tutorial de despliegue de la aplicación
Futuros pasos y cierre del curso
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 10
Preguntas 4
El chino de la tienda de al lado de mi casa se llama Li, no podría utilizar nuestra aplicación 😦
Jaja
me salia un error que no entendia porque, hasta que me di cuenta que efectivamente copie mal una parte del codigo, cuantas veces ya me habra pasado esto… :\
En el serializer de SignUp, método validate, aconsejaría que el mensaje de validación se retornara de la siguiente manera:
<h4>Excepción</h4>raise serializers.ValidationError({
'password_confirmation': 'Passwords don\'t match.'
})
<h4>Presentación</h4>
{
"password_confirmation": [
"Passwords don't match."
]
}
En lugar de:
<h4>Excepción</h4>raise serializers.ValidationError('Passwords don\'t match.')
<h4>Presentación</h4>
{
"non_field_errors": [
"Passwords don't match."
]
}
Esto con la intención de que para el frontend sea más sencillo implementar un manejador de errores y pueda relacionar el mensaje de error a un input de un formulario.
En lugar del
profile = Profile.objects.create(user=user)
profile.save()
se prodria hacer con signals agregar en los modelos agregando bajo el modelo esto:
@receiver(post_save, sender=User)
def ensure_profile_exists(sender, instance, **kwargs):
if kwargs.get('created', False):
Profile.objects.get_or_create(user=instance)
les dejo la documentacion:
https://docs.djangoproject.com/en/3.2/topics/signals/
Cómo puedo agregar el perfil al retorno del token y del usuario? cómo accedo a la relación??
Race Condition
Existe una condición de carrera que se puede generar cuando se intenta generar dos usuarios con el mismo username o email. Puede ser que el validator sea aprobado en ambos casos debido a que ninguno de las dos peticiones de crear un usuario(con mismo username o email) haya sido reflejada en la base de datos pero posteriormente siempre habrá una primera petición que sera manejada por el manejador de la base de datos primero y la segunda petición lanzara una exepción de tipo integridad, esto afecta al método Create del serializador para Sign Up, habría que establecer ese caso, a continuación una simple corrección:
def create(self, validated_data):
try:
user = CustomUser.objects.create_user(**validated_data)
except IntegrityError as e:
raise serializers.ValidationError(f'Username or Email alredy exists.')
profile = Profile.objects.create(user=user)
profile.save()
return user, profile
La implementación no es del todo detallada en el sentido de que solo menciona que el Username o el Email ya existen pero considerando que este seria un caso muy extraño en donde posiblemente una persona malintencionado esta intentando crear condiciones de carrera al crear un mismo usuario dos veces, creo que es suficiente con mencionar que alguno de los dos es el repetido. Otra implementación mas detallada podría profundizar en cual es el campo repetido y mencionar específicamente cual es.
passwords does not match
Tengo problemas con http en todas las funciones post. Me dice: “You are seeing this message because this site requirse a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties”.
Intente con el decorador @csrf_exempt en ambas funciones post pero sigue apareciendo el mismo error.
Alguien sabe como solucionarlo?
Ayuda por favor!!! tengo problemas a la hora de levantar el docker, siempre falla es el contenedor de django, Estoy en win10, ¿Alguna sugerencia?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.