【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管理はまだ構築してないですが、これも簡単だと嬉しいなぁ。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください