Например так если использовать common based views:
from django.contrib.auth.decorators import login_required
class LoginRequiredMixin(object):
@classmethod
def as_view(cls, **initkwargs):
view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
return login_required(view, login_url=reverse_lazy('login'))
навешиваете этот миксин на все вьюхи, и они при попытке входа под неавторизованным пользователем будет перебрасывать его на страницу входа для авторизации.
А вообще кучу возможных вариантов вам уже в той теме насоветовали.