Fundamentos de Django

1

¿Qué es Django?

2

¿Cómo instalar Django?

3

Entendiendo la arquitectura de Django

4

Qué es el patrón MVT (Model, View y Template)

La M en el Patrón: Modelo

5

Introducción a Modelos y Bases de Datos

Manejo Avanzado de Modelos y Bases de Datos

6

Gestión de Modelos y Bases de Datos en Django con SQLite

7

Inserción de Datos con Django

8

Actualización y Eliminación de Datos en Django

Relaciones y Asociaciones entre Modelos

9

Creación y Gestión de Relaciones entre Modelos en Django

10

Relaciones Muchos a Muchos (N:N) en Django

11

Relaciones Uno a Uno (1:1) en Django

12

Queries y Filtros en Django: Optimización y Estrategias Avanzadas

Configuración de URLs y Vistas Avanzadas

13

Gestión de URLs en Django: Configuración, Rutas y Mejores Prácticas

14

Vistas Basadas en Clases en Django

La T en el Patrón: Plantillas o Templates

15

Personalización de Interfaz con Plantillas en Django

Desarrollo de Aplicaciones en Django

16

Configuración del Proyectos en Django

17

Creación del Modelo para la Aplicación 'Products' en Django

18

Cómo Crear Migraciones de Datos en Django

19

Creación de la Aplicación 'Products' con Formularios en Django

20

Integracion de TailwindCSS en Django

21

Django Admin

22

Manejo de Sesiones en Django

23

Manejo de Órdenes en CoffeShop

24

Manejo de Pedidos en CoffeShop

25

Mixings en vistas basadas en clases

26

Agregar productos a la orden

Django Rest Framework

27

Django REST Framework

Despliegue de aplicaciones Django

28

Configurar PostgreSQL en AWS con Django

29

Variables de entorno en Django

30

¿Cómo usar Unit Testing en Django?

31

Debugging en Django

32

Desplegar aplicaciones de Django en AWS

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Django

Curso de Django

Luis Martínez

Luis Martínez

Manejo de Pedidos en CoffeShop

24/32
Recursos

¿Cómo crear una interfaz para los usuarios finales?

En una aplicación para cafeterías es esencial tener interfaces separadas para los empleados y los clientes finales. Este diseño asegura que la información sensible se mantenga privada. Comencemos creando una interfaz adecuada para los usuarios finales, donde puedan ver su pedido sin acceder a otros datos.

¿Qué pasos seguir para integrar el botón "Mi Pedido"?

El botón "Mi Pedido" es crucial para que los clientes puedan revisar sus pedidos. Aquí tienes una guía detallada sobre cómo implementarlo en tu aplicación Django:

  1. Revisar el botón en el template: Asegúrate de que el botón "Mi Pedido" tenga asignada una URL específica. En este caso, no tenía ninguna URL, por lo que se usó un numeral.

  2. Configurar las URLs de la aplicación: Dirígete al archivo urls.py de tu aplicación Orders. Crea una nueva ruta:

    path('myorder/', views.MyOrderView.as_view(), name='my_order')
    
  3. Crear la vista específica: Dentro del archivo views.py, crea una nueva vista que heredará de DetailView para obtener y mostrar un objeto específico.

    from django.views.generic import DetailView
    from .models import Order
    
    class MyOrderView(DetailView):
        model = Order
        template_name = 'orders/my_order.html'
        context_object_name = 'order'
    

¿Cómo personalizar la vista para mostrar solo una orden activa?

Personalizar la vista permite mejorar la experiencia del usuario gracias a una presentación precisa y ajustada:

  • Modificar el método get_object para que filtre por la orden activa, sin requerir directamente el ID en la URL.
    def get_object(self, queryset=None):
        return Order.objects.filter(is_active=True).first()
    

¿Qué recursos adicionales son útiles para configurar vistas genéricas en Django?

Para profundizar en el uso de vistas genéricas en Django, te recomendamos explorar el sitio web ccbb.co.uk, donde encontrarás documentación y ejemplos detallados sobre cómo utilizarlas eficientemente.

¿Cómo mejorar la experiencia del usuario en la plantilla HTML?

Para que los pedidos se muestren adecuadamente se requiere una estructura HTML limpia y efectiva:

¿Cómo extender las plantillas base en Django?

Crea un archivo my_order.html dentro de una nueva carpeta templates/orders:

{% extends 'base.html' %}

{% block content %}
  {% if order %}
    <h2>Detalles de tu pedido</h2>
    <p>Usuario: {{ order.user.username }}</p>
    <p>Fecha: {{ order.order_date|date:"SHORT_DATE_FORMAT" }}</p>
    <ul>
      {% for line_item in order.orderproduct_set.all %}
        <li>{{ line_item.product.name }} - ${{ line_item.product.price }}</li>
      {% empty %}
        <p>No hay elementos en tu pedido.</p>
      {% endfor %}
    </ul>
  {% else %}
    <p>No hay pedidos activos.</p>
  {% endif %}
{% endblock %}

¿Cómo configurar el debug para solucionar problemas?

Para identificar errores en el template, usa el tag {% debug %} sobre el contexto para ver todas las variables disponibles. Recuerda eliminar el debug una vez solucionado el problema.

¿Cómo asegurar que solo el usuario autorizado vea su orden?

Aunque hemos implementado el detalle de la orden, es vital garantizar que cada usuario solo vea sus propios pedidos. Aquí te dejo un desafío:

  • Ajustar el filtro de la query: Asegúrate de que la orden mostrada corresponde al usuario autenticado.

Para ello, en el método get_object, filtra por el usuario actual usando request.user. ¡Manos a la obra, mejora tu código y continua aprendiendo sobre Django para crear aplicaciones más robustas!

Aportes 3

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Realicé este complemento con funciones o methodos dentro de los modelo para calcular total, igv, subtotal: Pero no son campos dentro de los modelo, solo se calculan por los campos quantity y precio. Mi pregunta esta es una buena practica? o debo crear los campos en los modelos para estos casos que son necesarios los totales, subtotales, igv (IVA) ? Y como lo realizaría? ![](https://static.platzi.com/media/user_upload/image-e50fa388-acca-4f62-a6ad-13fdb9f14bb5.jpg)
Esto estaba en la documentación: #### The `LoginRequiredMixin` mixin[¶](https://docs.djangoproject.com/en/5.1/topics/auth/default/#the-loginrequiredmixin-mixin "Permalink to this headline") When using [class-based views](https://docs.djangoproject.com/en/5.1/topics/class-based-views/), you can achieve the same behavior as with `login_required` by using the `LoginRequiredMixin`. This mixin should be at the leftmost position in the inheritance list. *class* `LoginRequiredMixin`[\[source\]](https://github.com/django/django/blob/stable/5.1.x/django/contrib/auth/mixins.py#L67)[¶](https://docs.djangoproject.com/en/5.1/topics/auth/default/#django.contrib.auth.mixins.LoginRequiredMixin "Permalink to this definition") If a view is using this mixin, all requests by non-authenticated users will be redirected to the login page or shown an HTTP 403 Forbidden error, depending on the [`raise_exception`](https://docs.djangoproject.com/en/5.1/topics/auth/default/#django.contrib.auth.mixins.AccessMixin.raise_exception "django.contrib.auth.mixins.AccessMixin.raise_exception") parameter. You can set any of the parameters of [`AccessMixin`](https://docs.djangoproject.com/en/5.1/topics/auth/default/#django.contrib.auth.mixins.AccessMixin "django.contrib.auth.mixins.AccessMixin") to customize the handling of unauthorized users: from django.contrib.auth.mixins import LoginRequiredMixin class MyView(LoginRequiredMixin, View): login\_url = "/login/" redirect\_field\_name = "redirect\_to" url: <https://docs.djangoproject.com/en/5.1/topics/auth/default/> Pero si vas al source code te muestra como usarlo: class LoginRequiredMixin(AccessMixin): """Verify that the current user is authenticated.""" def dispatch(self, request, \*args, \*\*kwargs): if not request.user.is\_authenticated: return self.handle\_no\_permission() return super().dispatch(request, \*args, \*\*kwargs) Lo unico que le agregue al codigo del profe fue: ```python from django.shortcuts import render from django.views.generic import DetailView from .models import Order from django.contrib.auth.mixins import LoginRequiredMixin #la importación del mixin class OrderDetailView(LoginRequiredMixin, DetailView): #se le pasa a la clase model = Order template_name = "orders/order_detail.html" context_object_name = 'order' def get_object(self, queryset=None): return Order.objects.filter(user=self.request.user, is_active=True).first() #y en el filtro se pone otra condición para que el is:active pertenezca al usuario logeado ```from django.shortcuts import renderfrom django.views.generic import DetailViewfrom .models import Orderfrom django.contrib.auth.mixins import LoginRequiredMixin class OrderDetailView(LoginRequiredMixin, DetailView): model = Order template\_name = "orders/order\_detail.html" context\_object\_name = 'order' def get\_object(self, queryset=None): return Order.objects.filter(user=self.request.user, is\_active=True).first()
![](https://static.platzi.com/media/user_upload/image-b07d171b-ffa7-42b9-a207-acc2f3c2532d.jpg)