これは少し短いミドルウェアです。
from django.contrib.auth.decorators import login_required
class LoginRequiredMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
if not getattr(view_func, 'login_required', True):
return None
return login_required(view_func)(request, *view_args, **view_kwargs)
ログインしなくても表示できる各ビューで、「login_required」を False に設定する必要があります。
関数ビュー:
def someview(request, *args, **kwargs):
# body of view
someview.login_required = False
クラスベースのビュー:
class SomeView(View):
login_required = False
# body of view
#or
class SomeView(View):
# body of view
someview = SomeView.as_view()
someview.login_required = False
これは、ログインビューについて何かをしなければならないことを意味しますが、とにかく私はいつも自分の認証バックエンドを書くことになります。