Podemos evitar linea invitations = [x[0] for x in unused_invitations]
, si agregamos el parametro flat=True
al query anterior, quedando .values_list('code', flat=True)
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
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 11
Preguntas 0
Podemos evitar linea invitations = [x[0] for x in unused_invitations]
, si agregamos el parametro flat=True
al query anterior, quedando .values_list('code', flat=True)
Permission
class IsSelfMember(BasePermission):
"""Allow access only to the owner of the invitations."""
def has_permission(self, request, view):
"""Check object and user"""
obj = view.get_object()
return request.user == obj.user```
Viewset
def get_permissions(self):
"""Assing permission based on action."""
permission_classes = [IsAuthenticated, IsActiveCircleMember]
if self.action == 'invitations':
permission_classes.append(IsSelfMember)
return [permission() for permission in permission_classes]
Les recomiendo tener en cuenta para sus propios prioyectos cuando se tenga que hacer algun calculo numerico en los datos de un modelo de tu aplicacion, las condiciones de carrera.
https://docs.djangoproject.com/en/3.1/ref/models/expressions/#avoiding-race-conditions-using-f
el codigo
pablo = User.objects.get(username='ptrinidad')
freddy = User.objects.get(username='freddier')
fciencias = Circle.objects.get(slug_name='fciencias')
m = Membership.objects.create(user=pablo, profile=pablo.profile, circle=fciencias, invited_by=freddy)
También podemos agregar el permiso de IsSelfMember en el decorador action de invitations de la siguiente manera:
@action(detail=True, methods=['GET'], permission_classes=[IsSelfMember])
Entonces el usuario tendria que revisar sus invitaciones para que se le generen nuevas?
La lógica para
diff = member.remaining_invitations - len(unused_invitations)
No me quedo muy clara. ¿Por que se hace la diferencia?
Tengo una duda, al final del video se generan 10 invitaciones; pero en mi caso cuando hago la petición, las invitations me aparece una lista vacia [], y cuando hago debug, mis remaining_invitations son = 0 y las unused_invitations son 0 igual, así que nunca se logran crear; será que en algún momento se setean un total de invitaciones?
No comprendo la lógica para
diff = member.remaining_invitations - len(unused_invitations)
Alguien puede ayudarme? 😦
En diff = member.remaining_invitations - len(unused_invitations)
¿no sería mejor utilizar el método .count
?, a pesar que utilicemos el método values_list
su resultado sigue siendo un queryset y un count
siempre es mejor que utilizar len sobre un queryset.
Excelente…
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.