post_new
, post_edit
, post_draft_list
, post_remove
, post_publish
のビューを保護し、ログインしているユーザだけがアクセスできるようにします。そうするために、Djangoには、デコレータ と呼ばれる素敵なヘルパーが同梱されています。今は技術的なことは気にしないでください。あとでフォローします。使いたいデコレータは、Djangoのdjango.contrib.auth.decorators
モジュールに同梱された、login_required
というものです。blog/views.py
を編集し、一番上に次のimport文を追加してください:post_new
, post_edit
, post_draft_list
, post_remove
, post_publish
のそれぞれのビューの前に、以下のように1行追加してください(ビューにデコレータをつけています):http://127.0.0.1:8000/post/new/
にアクセスしてみましょう。違いに気づきましたか?空のフォームが出てきたときは、管理画面のチャプターからログインしたままかもしれません。http://127.0.0.1:8000/admin/logout/
にアクセスしてログアウトして、再度http://127.0.0.1:8000/post/new/
にアクセスしてみてください。
post_edit
, post_remove
, post_draft_list
, post_publish
にもデコレータを追加することを忘れないでくださいね。mysite/urls.py
の中に、path('accounts/login/', views.LoginView.as_view(), name='login')
というurlを追加します。ファイルは次のようになるでしょう:blog/templates/registration
というディレクトリを作って、中にlogin.html
というファイルを作成してください:mysite/settings.py
に設定を追加します:blog/templates/blog/base.html
を開いて、<body>
と</body>
タグの中を次のように変更してください。if
条件式で、認証されたユーザーには追加/編集ボタンが表示されるようにしています。認証されていない場合は、ログインボタンが表示されます。blog/templates/blog/base.html
を次のように修正します:django.contrib.auth.views.logout
)を示すurlを次のようにmysite/urls.py
に追加することを思いついたんではないでしょうか: