これまでの作業でログイン・ログアウト機能が実装でき,実際に「ユーザ一覧」ページを表示するためにはログインを必要とするようにできた.ここでは,Comments アプリケーションの各ページでもユーザ認証を求めるように変更する.
以前のページで記述したように request.user.is_authenticated
でログイン状態を確認する処理をすべての関数で記述するとユーザ認証を求めるようにできます.
comments/views.py
from django.shortcuts import render
from django.shortcuts import redirect
from django.urls import reverse
# Create your views here.
def comments_index(request):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (reverse('users:login'), request.path))
context = {}
return render(request, 'comments/index.html', context)
なお,別の方法としてデコレータを利用する方法があります.この場合もユーザ認証を求めるすべての関数の直前に配置しなければならないことには注意してください.
comments/views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
# Create your views here.
@login_required(login_url='/users/login/')
def comments_index(request):
context = {}
return render(request, 'comments/index.html', context)
@login_required(login_url='/users/login/')
def comments_show(request, comment_id):
context = {}
context['comment_id'] = comment_id
return render(request, 'comments/show.html', context)
@login_required(login_url='/users/login/')
def comments_create(request):
context = {}
context['page_title'] = 'コメントの投稿'
return render(request, 'comments/form.html', context)
@login_required(login_url='/users/login/')
def comments_update(request, comment_id):
context = {}
context['page_title'] = 'コメントの編集'
return render(request, 'comments/form.html', context)
@login_required(login_url='/users/login/')
def comments_delete(request, comment_id):
return render(request, 'comments/delete_confirm.html')