A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Protegiendo la vista de perfil, Detail View y List View

29/37
Recursos

En esta clase vamos a usar Detail View para continuar con el perfil de usuario y usaremos List View para definir la lista de views.

Reto: Hacer el detalle de los posts con DetailView

Aportes 55

Preguntas 18

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

En estos 煤ltimos v铆deos se le nota el af谩n de terminar r谩pido el curso, solo codifica y no explica a profundidad los conceptos, una lastima porque se ve que tiene dominio amplio del tema pero se siente que estuviera mas programando que ense帽ando

Les recomiendo colocar el detail al final de todos los path,porque si le das a logout, examinara primero esa ruta, y lo tomara como un usuario la palabra 鈥榣ogout鈥

"""Urls Users"""

# Django
from django.urls import path
from django.views.generic import TemplateView

# View
from users import views

urlpatterns= [
    # Management
    path(
        route='login/',
        view=views.login_view,
        name='login'
    ),
    path(
        route='logout/',
        view=views.logout_view,
        name='logout'
    ),
    path(
        route='signup/',
        view=views.signup,
        name='signup'
    ),
    path(
        route='me/profile/',
        view=views.update_profile,
        name='update_profile'
    ),

    # Posts
    
    path(
        route='<str:username>/',
        view=views.UserDetailView.as_view(),
        name='detail'
    ),
]```

el problema con muchos de estos cursos o por lo menos en este curso, es que nos dicen qu茅 usar pero no nos dicen por qu茅 usarlos.

Le falta pasi贸n a Pablo Trinidad para dar clases, pero esta es la peor de todas (de las que llevo)

No se de que os quej谩is, yo creo que lo ha hecho muy bien y no nos lo da todo masticado, durante todo el curso nos ha estado animando a que usemos la documentaci贸n, y ahora nos esta dando la oportunidad de que nos busquemos un poco la vida, aunque nos sigue explicando las cosas clave, y con muy buenas pr谩cticas.
Me parece genial este curso porque el profesor nos permite que investiguemos y profundicemos por nuestra cuenta que es como realmente se aprende.
Y se que estoy en lo cierto porque he intentado ir por mi cuenta para hacer algunas cosas y he podido salir adelante sin muchos problemas, eso significa que el profesor nos ha dado la base y la l贸gica que requiere programar con django. Y eso es algo que no puedo decir de todos los cursos, porque hay cursos que todo va muy bien hasta que intentas hacer algo por tu cuenta y entonces te das cuenta de que no eres capaz de hacer nada sin la ayuda del profesor pero este curso no es el caso.
Espero que m谩s de uno coincida conmigo.
Le estoy muy agradecido por su gran curso Pablo :鈥)

Ya se le nota el cansancio al profesor, falt贸 m谩s explicaci贸n

Tratando le resolver un problema con la paginaci贸n me consegu铆 este blog (ingl茅s):
https://simpleisbetterthancomplex.com/
Est谩 muy bueno!

Huy, esto se puso denso, ya me perd铆, toco repetir clases, con calma. Ustedes como lo vieron? alguien que pueda sintetizar lo que estamos mejorando en estas clases. Gracias

El material es bueno, y sin duda la herramienta es genial, el maestro es una excelente desarrollador de esta tecnolog铆a pero es muy malo para explicar.

Hola Me quede trabado en esta Unidad. No me funciona platzigram. Ven铆a todo bien hasta aqu铆. El problema es que ahora me ejecuta perfectamente el runserver. Pero cuando intento acceder al localhost:8000, me sale un redireccionamiento infinito 鈥 como si hubiera un infinite loop y el navegador me sugiere que borre mis cookies. Alguna Sugerencia ???

Ser铆a bueno cambiar la descripci贸n del v铆deo. 鈥溾 y usaremos List View para definir la lista de posts鈥 no de views.

Desde la clase anterior que se empezaron a cambiar las rutas han salido muchos erorres y sumandole esta clase peor鈥

The get_context_data method return the values you will be able to use in template, in this case, you are overriding get_context_data, so if you don鈥檛 want to lose the default DetailView context data, you need to call the original get_context_data with super and then add new values to the context and return it to template.

buena clase , pero p贸nganlo en 0.5 de velocidad xD

no se entendi贸 muy bien esta clase, el profesor parec铆a hablar mas para si mismo que para nosotros.

Se deber铆a de mejorar y actualizar el curso. Seria genial que en el se haga un crud con funciones, y otro con vistas basadas en clases, para ver la diferencia, entenderle mejor y no estar borrando, cambiando c贸digo en cada secci贸n. Saludos!!

Creo que esto puede ayudar a entender un poco mas el manejo de DetailView, a mi me ayudo a entender un poco mas, espero les sirva:

https://www.agiliq.com/blog/2019/01/django-when-and-how-use-detailview/

Haganlo con paciencia, en esta clase al parecer se salto varios puntos, por ejemplo:

 {% for post in posts %}
            <div class="col-sm-12 col-md-8 offset-md-2 mt-5 p-0 post-container">
                <div class="media pt-3 pl-3 pb-1">
                    <a href="{% url 'users:detail' post.profile.user.username %}"> #Aca hice la modificacion porque siempre que hacia click en la imagen me mandaba directo a mi perfil
                    <img class="mr-3 rounded-circle" height="35" src="{{ post.profile.picture.url }}" alt="{{ post.user.username }}">
                    </a>
                    <div class="media-body">
                        <p style="margin-top: 5px;">{{ post.user.get_full_name  }}</p>
                    </div>
                </div>```

Esta clase pas贸 por m铆, muy pesada. No entend铆 casi nada

Recuerdo que compre la suscripcion a Platzi por una frase de Freddy: 鈥淧latzi no es la 煤nica manera de aprender a programar pero s铆 la m谩s r谩pida鈥 . En esta clase tienes que leer s铆 o s铆 la documentaci贸n para enteder lo que esta haciendo el profe, porque ni siquiera da una explicacion basica. Y para leer documentaci贸n no hace falta pagar nada.

Hice un tutorial donde explico como resolver el reto que aparece en est谩 clase, sin embargo si tienen problemas con las rutas y les aparece el problema at reverse lo pueden solucionar a帽adiendo al path de platzigram/urls.py lo siguiente:

    path(r'', include('django.contrib.auth.urls')),

Y revisen todos los template y verifiquen que tengan las rutas correctamente, ya que modificamos el nombremiento de estas

El turorial para resolver el reto es este:
Reto

Saludos!!!

Hola, tengo unas dudas con respecto a esta clase: por qu茅 en UserDetailView no se usa model = User?. Por qu茅 se hace uso de get_context_data?, no se podr铆a obtener los posts del usuario debido a la relaci贸n del modelo User con Post?

Desde ya muchas gracias.
Saludos!

hay otra forma de acceder a los post de un usuario desde su vista de detalle desde el template sin modificar el contexto: user.post_set.all muestra una lista de los post del usuario que puede ser recorida con un ciclo for: por ejemplo {% for post in user.posts_set.all %} esto funciona bien en relaciones de uno a muchos como es este caso

Dejo mis dos soluciones para el desaf铆o, con las functions views y las class-based views. C煤al les parece m谩s facil?

# Vista post usando funcs
@login_required
def view_post(request, post_id='post_id'):
    """View a post"""
    post = Post.objects.get(id=post_id)
    #import pdb; pdb.set_trace()

    return render(request, template_name='posts/post.html', context={'post':post})
    

# Vista detallada para el usuario usando ClassViews
class PostView(LoginRequiredMixin, DetailView):
    """Post detail view"""
    template_name = 'posts/post.html'
    # QuerySet
    slug_field = 'id'
    slug_url_kwarg = 'post_id'
    queryset = Post.objects.all()
    context_object_name = 'post'

No que era la forma m谩s r谩pida de aprender online? Totalmente en desacuerdo

Creo que nos unimos a este tipo de plataforma para encontrar ense帽anza de calidad, mas puntual y no perder tiempo, no se como paso la prueba de calidad este curso o como no lo han renovado desde de 3 a帽os, viendo la cantidad de comentarios negativos. !!! insatisfacci贸n total !!!

Pero que clase m谩s decepcionante, urgente falta actualizar este curso. No se entiende nada

Yo deje la opcion de poder ver el perfil aunque no se este logeado solo hice esta peque帽a modificacion al navbar para que todo estubiese en orden

{% load static %}
<nav class="navbar navbar-expand-lg fixed-top" id="main-navbar">
    <div class="container">

        <a class="navbar-brand pr-5" style="border-right: 1px solid #efefef;" href="{% url "posts:feed" %}">
            <img src="{% static "img/instagram.png" %}" height="45" class="d-inline-block align-top"/>
        </a>

        <div class="collapse navbar-collapse">
            <ul class="navbar-nav mr-auto">

                <li class="nav-item">
                    {% if request.user.is_authenticated %}
                        <a href="{% url "users:detail" request.user.get_username %}">
                            {% if request.user.profile.picture %}
                                <img src="{{ request.user.profile.picture.url }}" height="35" class="d-inline-block align-top rounded-circle"/>
                            {% else %}
                                <img src="{% static 'img/default-profile.png' %}" height="35" class="d-inline-block align-top rounded-circle"/>
                            {% endif %}
                        </a>
                    {% else %}
                        <a href="{% url "users:login" %}">
                            <img src="{% static 'img/default-profile.png' %}" height="35" class="d-inline-block align-top rounded-circle"/>
                        <a/>
                    {% endif %}
                </li>

                <li class="nav-item nav-icon">
                    <a href="{% url "posts:create" %}">
                        <i class="fas fa-plus"></i>
                    </a>
                </li>

                <li class="nav-item nav-icon">
                    <a href="{% url "users:logout"  %}">
                        <i class="fas fa-sign-out-alt"></i>
                    </a>
                </li>

            </ul>
        </div>
    </div>
</nav>

me parece que esta es una buena clase pero siento que esta algo desordenada , tal vez la hubieran editado o regrabado , se siente como que le falto total planeacion

Qu茅 clase tan poco profesional, el profesor se ve m谩s aburrido dando la clase que uno mismo
Adem谩s que los errores de los templates debieron corregirse detr谩s de c谩maras para no perder tiempo en el video y dejarlo a modo de reto para el estudiante

Al utilizar la clase LoginRequiredMixin, esta no sabr谩 a donde redirigir cuando estamos accediendo a la ruta raiz sin autenticar. Por lo cual deben poner:
login_url = 鈥榰sers:login鈥

El c贸digo queda algo asi.

class UserDetailView(LoginRequiredMixin, DetailView):
    """User detail view."""
    login_url = 'users:login'
    template_name = 'users/detail.html'
    slug_field = 'username'
    slug_url_kwarg = 'username'
    queryset = User.objects.all()
    context_object_name = 'user'

    def get_context_data(self, **kwargs):
        """Add user's posts to context."""
        context = super().get_context_data(**kwargs)
        user = self.get_object()
        context['posts'] = Post.objects.filter(user=user.id).order_by('-created')
        return context

Les dejo la documentaci贸n
https://docs.djangoproject.com/en/3.2/topics/auth/default/

Algunos de los atributos de la clase DetailView son heredados de otras clases. SingleObjectMixin es una de esas.

doc: https://docs.djangoproject.com/en/3.2/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin

Espero que el pr贸ximo curso de Django este mejor explicado :l

me sale este error:C

como seria el detalle del perfil con funciones , y no con class based views ?

Si les aparece este problema NoReserveMatch at, pueden solucionarlo a帽adiendo un path a los urlpatterns en platzigram/urls.py

urlpatterns = [
    path(r'', include('django.contrib.auth.urls')),
    path('admin/', admin.site.urls),
    path('', include(('posts.urls', 'posts'), namespace='posts')),
    path('users/', include(('users.urls', 'users'), namespace='users')),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Particularmente tambien me costo trabajar esta clase pero si a alguien le sirve de ayuda dejo el repositorio que llevo documentando, espero sea de ayuda

Tengo una duda, cuando hago un signup y luego un login, nunca paso por update profile, ya he revisado todas las clases, pero aun no puedo repararlo por mi cuenta.

lista de post de un usuario

pablo gracias, como siempre muy completo con todo y documentacion. explicas muy bien y se entiende a la perfecccion

Realmente se necesita y vale la pena usar las Class-based views ?

Desde el anterior clase no me sirve nada y a ti si. Si vas a hacer cambios asegurate de cambiar todo para que no nos perjudique.

Como se puede cambiar para que si tiene la foto no la pida obligatoria-mente

# /detail/<int:pk>
class DetailPostView(LoginRequiredMixin, DetailView):
    template_name = 'posts/detail.html'
    queryset = Post.objects.all()
    slug_field = 'pk'
    slug_url_kwarg = 'pk'
    context_object_name = 'post'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['user'] = self.request.user
        return context

Hola, sigo teniendo el problema de que me redirecciona siempre a mi perfil, aqu铆 mi proyecto.
https://github.com/MichaelSornoza/Platzigram-Ms

Por qu茅 dejar que la imagen sea requerida? la imagen deber铆a ser opcional, si uno quiere la cambia, si no se deja as铆 卢卢

19 de Enero 2022 se viene update por lo que vi en la agenda 馃槂

馃槖 Demasiadas rectificaciones, se agradecer铆a que al grabar la clase estuviera preparada, he visto miles de clases gratuitas mejor preparadas.
En fin aprovechare lo que tengo pagado y volver茅 a YouTube

ok, veo que es necesario revizar todo el codio, se han hecho muchos cambios y algunas cosas se han roto

Como lidiar con el problema de actualizar perfil sin cargar otra foto de perfil:

if form.is_valid():
            #print(form.cleaned_data)
            data = form.cleaned_data
            profile.website = data['website']
            profile.phone_number = data['phone_number']
            profile.biografy = data['biografy']
            #profile.picture = data['picture']
            print("error------------------------------------------- {}".format(data['picture']))
            if data['picture'] == None:
                pass
            else:
                profile.picture = data['picture']
            profile.save()

            # Creacion de una url con kwargs: from django.urls import reverse
            url = reverse('users:detail', kwargs={'username': request.user.username})
            return redirect(url)

Llevo 3 d铆as en esta clase revisando los archivos que dejaron con respecto a los m铆os todo esta bien, y aun as铆 me genera error de login

y me dice que esta l铆nea esta mal, no me ha dejado pasar de este punto

Esta fue una de las clases mas dificiles que he visto, hay que leer mucha documentacion pero cuando lo entiendes te das cuenta de lo util y potente que es

necesitar茅 tres dias para digerir este video 馃槮