Django decorate URL allows you to apply a decorator to a URL pattern.
You can install with pip:
pip install decorate-url
In Django/Python you can wrap a function like this:
@wrapper
def function(..):
...This is great but only works on a single view. This module instead allows you to decorate an entire url pattern. Have a look at the examples below:
from decorate_url import decorated_url
from django.conf.urls import include, url
from django.contrib.auth.decorators import user_passes_test
def email_check(user):
return user.email.endswith('@example.com')
urlpatterns = [
url(r'^accounts/', include('apps.home.urls')),
# Admin
decorated_url(r'^example/', include('apps.example.urls'),
wrap=user_passes_test(email_check),
]In the above example, the user_passes_test decorator is applied to the
pattern r'^example/'. It ensures that only users with emails that end in @example.com can
access urls with the r'^example/' pattern.
from decorate_url import decorated_url
from django.conf.urls import include, url
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = [
url(r'^accounts/', include('apps.home.urls')),
# Admin
decorated_url(r'^admin/', include(admin.site.urls),
wrap=staff_member_required(login_url=settings.LOGIN_URL)),
]In the above example, the staff_member_required decorator is applied to the
pattern r'^admin/'. By setting the login_url to settings.LOGIN_URL, access to the
standard admin login page is blocked and forces staff users through the login screen
defined by settings.LOGIN_URL.