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

Próxima revisión
Revisión previa
wiki2:python:django:views [2018/10/11 19:39]
alfred creado
wiki2:python:django:views [2020/05/09 09:25] (actual)
Línea 12: Línea 12:
 def index(request):​ def index(request):​
     return HttpResponse('​Hey yo!')     return HttpResponse('​Hey yo!')
 +</​code>​
 +
 +
 +===== How to... =====
 +==== Get data from url ====
 +
 +=== En generic views ===
 +If you don't want to pass a pk or slug in your url, you'll need to override the ''​get_object''​ method and get your object another way.
 +<​code>​
 +path('​profile/<​username>',​ views.UserDetailView.as_view(),​ name='​profile'​)
 +</​code>​
 +
 +<​code>​
 +class UserDetailView(generic.DetailView):​
 +    model = apps.get_model('​openawards',​ '​User'​)
 +    username = ''​
 +
 +    def dispatch(self,​ request, *args, **kwargs):
 +        super().dispatch(request,​ *args, **kwargs)
 +        self.username = kwargs.get('​username',​ ''​)
 +
 +    def get_object(self):​
 +        return get_object_or_404(get_user_model(),​ username=self.username)
 +</​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:
 +<​code>​
 +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.1539286785.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)