前回はログイン機能を実装しましたが、今回は新規投稿ができるように改良します。

作成した掲示板はこんな感じになります。 ⇒ 動作確認はこちらから

新規投稿できるようにする

まず新規投稿のページを表示させるためのテンプレートを作成します。これは既存の投稿を編集し更新する処理でも使います。テンプレートの場所は{プロジェクト名}/bbs\templates\bbsディレクトリ内です。

article_form.html

それからarticle_list.htmlとarticle_detail.htmlの最初の行を{% extends ‘layout.html’ %}に変更してしまいましょう。そうするとトップページと個別ページにもログインしているかどうかを示すナビゲーションバーが表示されるようになります。

次にbbsディレクトリ内のviews.pyを以下のように変更します。

次にbbsディレクトリ内のurls.pyを以下のように変更します。

またトップページの下部に新規投稿用のボタンを設置します。

article_list.htmlの{% endblock %}のすぐ上の行に以下を追加します。

article_list.html

これでログインしているときは新規投稿のボタンが表示されます。

投稿内容を編集・更新できるようにする

次に投稿内容を変更するための処理を実装します。

次にbbsディレクトリ内のviews.pyを以下のように変更します。

次にbbsディレクトリ内のurls.pyを以下のように変更します。<int:id>が<int:pk>に変更されているので注意してください(自分がハマった)。

これで http://localhost:8000/bbs/{pk}/update/ にアクセスすると自分の投稿を編集できるようになります。またログインしていない場合や違うアカウントで投稿されたページを編集しようとした場合は403 Forbiddenと表示され、アクセスできません。

投稿を削除できるようにする

次に自分の投稿を削除できるようにします。

削除するときは確認のページが表示されますが、それを表示させるためのテンプレートを作成します。

作成する場所は{プロジェクト名}\bbs\templates\bbsディレクトリ内です。ファイル名はarticle_confirm_delete.htmlです。これもこの名前にしなければなりません。

article_confirm_delete.html

次にbbsディレクトリ内のviews.pyを以下のように変更します。

これで投稿が削除され、http://localhost:8000/bbs/ にリダイレクトされます。

次にbbsディレクトリ内のurls.pyを以下のように変更します。<int:id>が<int:pk>に変更されているので注意してください。

投稿内容を編集したり削除できるように投稿内容が表示されているページからリンクをはります。このときに編集と削除ができるアカウントでログインしていない場合はリンク自体が表示されないようにします。

{% if request.user.id == object.author_id %} と {% endif %} で挟まれた部分は投稿したアカウントでログインしているときしか表示されません。

article_detail.html

これで投稿を削除することができるようになりました。