How can I not use Django's admin login view?

后端 未结 10 2655
借酒劲吻你
借酒劲吻你 2020-12-28 15:11

I created my own view for login. However if a user goes directly to /admin it brings them to the admin login page and doesn\'t use my custom view. How can I make it redirect

10条回答
  •  盖世英雄少女心
    2020-12-28 15:21

    This is my solution with custom AdminSite class:

    class AdminSite(admin.AdminSite):
    
        def _is_login_redirect(self, response):
            if isinstance(response, HttpResponseRedirect):
                login_url = reverse('admin:login', current_app=self.name)
                response_url = urllib.parse.urlparse(response.url).path
                return login_url == response_url
            else:
                return False
    
        def admin_view(self, view, cacheable=False):
            inner = super().admin_view(view, cacheable)
    
            def wrapper(request, *args, **kwargs):
                response = inner(request, *args, **kwargs)
                if self._is_login_redirect(response):
                    if request.user.is_authenticated():
                        return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
                    else:
                        return redirect_to_login(request.get_full_path(), reverse('accounts_login'))
                else:
                    return response
    
            return wrapper
    

提交回复
热议问题