【Django】ページ閲覧に『ログイン必須』の規制を掛ける方法
【Django】ページ閲覧に『ログイン必須』の規制を掛ける方法
超簡単でした。
色んなやり方があるみたいですが、Djangoの基本機能のみで実装します。
ログイン規制は Views.py の設定だけでOK
# views.py
from django.contrib.auth.decorators import login_required # defで記載するものの規制用
from django.contrib.auth.mixins import LoginRequiredMixin # classで記載するものの規制用
""" ログイン不要のページ (def) """
def InfoView(request):
"""template_name = "websites/information.html"""
data = Contents.objects.filter(switch=1).filter(types=1).order_by('sort_number')
params = {
'title': 'インフォメーション',
'data': data
}
return render(request, 'websites/information.html', params)
”””” ログイン必須のページ (def) """
@login_required # このマーカー以降に書いた def はログイン必須ページになる
def ServiceView(request):
data = Contents.objects.filter(switch=1).filter(types=2).order_by('sort_number')
params = {
'title': '事業内容',
'data': data
}
return render(request, 'websites/service.html', params)
""" ログイン不要のページ (class) """
# @login_required 以降に書いていてもClassで記載したページはログイン必須にならない
class IndexView(generic.TemplateView):
template_name = "websites/index.html"
""" ログイン必須のページ (class) """
class InquiryView(LoginRequiredMixin,generic.FormView):# LoginRequiredMixinを記載する
template_name = "websites/inquiry.html"
form_class = InquiryForm
success_url = reverse_lazy('company:inquiry')
def form_valid(self, form):
form.send_email()
messages.success(self.request, 'メッセージを送信しました。')
logger.info('Inquiry sent by {}'.format(form.cleaned_data['name']))
return super().form_valid(form)
これだけで、ログイン必須ページにアクセスするとログインページへ遷移してくれる。
まとめ
ログイン必須化がこれだけで完了と言うのは驚きでした。
role管理はまだ構築してないですが、これも簡単だと嬉しいなぁ。


