Django: How can I apply the login_required decorator to my entire site (excluding static media)?

前端 未结 10 1996
日久生厌
日久生厌 2020-12-24 07:21

The example provides a snippet for an application level view, but what if I have lots of different (and some non-application) entries in my \"urls.py\" file, including templ

10条回答
  •  失恋的感觉
    2020-12-24 07:57

    Here's an example for new-style middleware in Django 1.10+:

    from django.contrib.auth.decorators import login_required
    from django.urls import reverse
    
    def login_required_middleware(get_response):
        """
            Require user to be logged in for all views. 
        """
        exceptions = {'/admin/login/'}
        def middleware(request):
            if request.path in exceptions:
                return get_response(request)
            return login_required(get_response, login_url=reverse('admin:login'))(request)
        return middleware
    

    This example exempts the admin login form to avoid redirect loop, and uses that form as the login url.

提交回复
热议问题