Herramientas de usuario

Herramientas del sitio


wiki2:python:django:views

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki2:python:django:views [2018/10/14 09:19]
alfred
wiki2:python:django:views [2020/05/09 09:25] (actual)
Línea 23: Línea 23:
 path('​profile/<​username>',​ views.UserDetailView.as_view(),​ name='​profile'​) path('​profile/<​username>',​ views.UserDetailView.as_view(),​ name='​profile'​)
 </​code>​ </​code>​
-:?: Me pregunto si hay otra forma mejor de sacar el parámetro de la url en vez de sobreescribiendo el dispatch+
 <​code>​ <​code>​
 class UserDetailView(generic.DetailView):​ class UserDetailView(generic.DetailView):​
Línea 34: Línea 34:
  
     def get_object(self):​     def get_object(self):​
-        ​username = self.request.GET.get('​username',​ ''​) +        return get_object_or_404(get_user_model(),​ username=self.username)
-        ​return get_object_or_404(get_user_model(),​ username=username)+
 </​code>​ </​code>​
 +
 +:?: Me pregunto si hay otra forma mejor de sacar el parámetro de la url en vez de sobreescribiendo el dispatch. Si!! Siempre puedes acceder a los kwargs de la request:
 +<​code>​
 +return get_object_or_404(get_user_model(),​ username=self.kwargs.get('​username',​ ''​))
 +</​code>​
 +
 Si los datos viniesen por query string: Si los datos viniesen por query string:
 <​code>​ <​code>​
 username = self.request.GET.get('​username',​ ''​) username = self.request.GET.get('​username',​ ''​)
 +</​code>​
 +
 +Coger la url con la que fue llamada la view:
 +<​code>​
 +request.build_absolute_uri()
 +</​code>​
 +
 +=== Set login_required decorator ===
 +En el urls.py:
 +<​code>​
 +login_required(ViewSpaceIndex.as_view(..))
 +</​code>​
 +Usando LoginRequiredMixin:​
 +<​code>​
 +from django.contrib.auth.mixins import LoginRequiredMixin
 +class MyView(LoginRequiredMixin,​ View):
 +    login_url = '/​login/'​
 +    redirect_field_name = '​redirect_to'​
 +</​code>​
 +Con el method_decorator:​
 +<​code>​
 +from django.utils.decorators import method_decorator
 +@method_decorator(login_required,​ name='​dispatch'​)
 +class ViewSpaceIndex(TemplateView):​
 +    template_name = '​secret.html'​
 +</​code>​
 +
 +=== Other decorators for user control ===
 +<​code>​
 +from django.contrib.auth.decorators import user_passes_test
 +
 +@user_passes_test(lambda u: u.is_superuser)
 +def my_view(request):​
 +    ...
 +</​code>​
 +
 +<​code>​
 +from django.contrib.admin.views.decorators import staff_member_required
 +
 +@staff_member_required
 +def my_view(request):​
 +    ...
 </​code>​ </​code>​
wiki2/python/django/views.1539508785.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)