Bienvenida

1

Todo lo que aprenderás sobre Django

Cimientos

2

Arquitectura de una aplicación

3

The Twelve-Factor App

4

Codebase: Settings modular

5

Codebase: Dependencias y archivos de docker

6

Codebase: Docker

7

Setups alternativos

Modelos

8

Herencia de modelos

9

Proxy models

10

App de usuarios

11

Organizando modelos en un paquete de Django

12

Creando el modelo de perfil de usuario

13

Solución del reto: arreglando la migración de users a user

14

Aplicación y modelo de círculos

15

Migraciones y admin de círculos

Introducción a Django REST Framework

16

Aprende cómo construir tu propio API con Django Rest Framework

17

Vistas, URLs y Parsers de DRF

18

Serializers

19

Buenas prácticas para el diseño de un API REST

20

Request, response, renderers y parsers

Real DRF

21

Autenticación y tipos de autenticación

22

APIView

23

Creando el token de autorización

24

User sign up

25

Limitar login a usuarios con cuenta verificada

26

Configurar envío de email

27

Instalar PyJWT y generar tokens

28

Verificar cuenta usando JWT

29

Actualizar modelo de circle (membership)

30

Crear CircleViewSet

31

Añadiendo autorización y paginación

32

Creación de circulos

33

Update de círculo, custom permissions y DRF Mixins

34

Migración de vistas de usuarios a ViewSets

35

Detalle de usuario

36

Update profile data

37

List members - Recursos anidado

38

Retrieve destroy member

39

Modelo de invitaciones y manager

40

Obtener invitaciones de un miembro

41

Unirse a grupo

42

Filtrado

43

App de rides y modelos

44

Implementar la publicación de un ride

45

Validación de campos de un serializer

46

Listado de rides

47

Editar un ride

48

Unirse a viaje

49

Terminar viaje

50

Calificar viaje

Tareas asíncronas

51

¿Qué es Celery?

52

Creando tarea asíncrona

53

Creando tarea periódica

Testing

54

Python unittest y Django TestCase

55

DRF APITestCase

Django Admin

56

Admin actions: Modificar datos de un query

57

Admin actions: Regresando una respuesta HTTP

Deployment

58

Instalación de la aplicación

59

Configuración del dominio en Mailgun y del Bucket en Amazon S3

60

Configuración final de Docker Container usando Supervisor

61

Tutorial de despliegue de la aplicación

62

Futuros pasos y cierre del curso

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

User sign up

24/62
Recursos

Aportes 10

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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… :\

Aporte

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?