Source code for cwf.views.views

"""
    Subclasses of :py:class:`cwf.views.base.View` that override the :py:meth:`cwf.views.base.View.execute` method.

    The ``execute`` method is used to get a view for the ``target`` to render and call it.

    These classes overwrite this behaviour to restrict or modify the result of calling the target.
"""
from django.contrib.admin.views.decorators import staff_member_required
from .base import View

[docs]class StaffView(View): """Restrict to staff members"""
[docs] def execute(self, target, request, args, kwargs): """ Use the django provided `staff_member_required <https://github.com/django/django/blob/master/django/contrib/admin/views/decorators.py>`_ decorator to ensure only staff members can access any target on this class. """ def view(request, *args, **kwargs): return super(StaffView, self).execute(target, request, args, kwargs) return staff_member_required(view)(request, *args, **kwargs)
[docs]class LocalOnlyView(View): """Restrict to local users only"""
[docs] def execute(self, target, request, args, kwargs): """ Raise a 404 if the Remote Address of the user is not 127.0.0.1. Otherwise proceed as normal. """ ip = request.META.get('REMOTE_ADDR') if ip != '127.0.0.1': self.renderer.raise404() return super(LocalOnlyView, self).execute(target, request, args, kwargs)
[docs]class JSView(View): """Convert target output into a json response"""
[docs] def execute(self, target, request, args, kwargs): """ Assume the result of calling the target returns ``(template, data)``. Proceed to return the data as a :py:meth:`json response <cwf.views.rendering.Renderer.json>` """ result = super(JSView, self).execute(target, request, args, kwargs) template, data = result return self.renderer.json(data)