DjangoはPython製のWebフレームワークです。Webアプリ開発でよく使われる「ユーザー認証」「管理画面」などの便利な機能があらかじめ含まれているので、仕様を理解して使えば簡単に掲示板のようなものを作成して公開することができます。ただ仕様を完全に理解するのは難しいです。

ではさっそく使ってみましょう。

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

プロジェクトとアプリを作成する

まずDjangoがインストールされていないのであればインストールしましょう。

Djangoのインストールは非常に簡単で、ターミナル(WindowsならコマンドプロンプトまたはPowerShell)で以下のように入力するだけです。

1行目の「$」は、その後ろがターミナルに入力するコマンドであることを表しています。

インストールが終わったらプロジェクトとアプリを作成します。

プロジェクトを作成するときはプロジェクト名をmyappにするのであればプロジェクトを作成したいディレクトリに移動して以下をターミナルに入力します。

次にアプリケーションを作成します。cdコマンドでプロジェクトを作成したディレクトリに移動して以下を実行します。

bbsは掲示板本体、accountsはアカウントをもつ人でないと書き込み、編集、削除ができないようにログイン機能を持たせるために作ります。

これで試しにサーバーを起動してみます。そのためにはプロジェクトを作成したディレクトリで以下を実行します。

するとサーバーが起動して以下のような表示がされます。

なにやら赤い文字で警告文のようなものが表示されますが(データベースのマイグレーションをしていないため)、http://localhost:8000/にアクセスすると以下のように表示されます。サーバーを停止させるときはCtrl+Cを押します。

ルーティングを設定する

では他のページにもアクセスできるようにしましょう。

まずbbsディレクトリのなかにurls.pyという名前でファイルを作成します。

そのなかに以下のように書きます。

なにをしようとしているかというと

http://localhost:8000/bbs/ なら トップページ
http://localhost:8000/bbs/{数字} なら 書き込みの個別ページ
http://localhost:8000/bbs/create なら 新規書き込みのページ
http://localhost:8000/bbs/{数字}/update/ なら 書き込みの更新処理
http://localhost:8000/bbs/{数字}/delete/ なら 書き込みの削除処理

をしようとしているのです。

そのあとbbsディレクトリのなかにあるviews.pyを編集します。views.pyは他のディレクトリのなかにもあります。ここで編集しようとしているのはbbsディレクトリのなかにあるviews.pyです。

いまはそれぞれのページにアクセスすると文字が表示されるだけでデータベースにアクセスしたり変更を加えることはありません。

外から見るとmyappディレクトリのなかにさらにmyappディレクトリがあります。これを内側のmyappディレクトリと呼ぶことにします。内側のmyappディレクトリのなかにもurls.pyがあります。これを以下のように変更します。

これで以下のurlにアクセスすると文字列が表示されるようになりました。トップページにアクセスすると http://localhost:8000/bbs/ にリダイレクトされます。

http://localhost:8000/
http://localhost:8000/bbs/
http://localhost:8000/bbs/{数字}
http://localhost:8000/bbs/{数字}/update/
http://localhost:8000/bbs/{数字}/delete/

それから内側のmyappディレクトリのなかにsettings.pyがありますが、これを少しだけ編集します。

settings.pyの変更は以上です。

データベースをつかってみる

次にデータベースをつかって書き込み内容を表示させます。

そのためにはbbsディレクトリのなかにあるmodels.pyに以下を記述します。

models.pyを編集したらマイグレーションという処理が必要です。もしサーバーが起動している場合はCtrl+Cで停止させてからターミナルから以下を入力します。

このふたつのコマンドを実行してからもう一度サーバーを起動すると、これまで表示されていた赤い警告文が表示されなくなりました。

管理サイトをつくる

次に管理サイトをつくります。これがあると書き込み内容や登録したユーザーを管理することができるようになります。サーバーを停止させてから以下を入力します。

ユーザーネームとメールアドレス、パスワードを適当に設定します。パスワードを入力するときに *** のような記号が表示されないのですが、入力はされています。あとで必要になるので登録内容を忘れないようにしておきましょう。

サーバーを起動したら http://localhost:8000/admin/ にアクセスします。するとログイン画面が現れるので設定したユーザー名とパスワードでログインします。

いったんログアウトしたら

bbsディレクトリのなかにあるadmin.pyを編集します。

もう一度、管理サイトにログインすると BBS => Articleという項目があります。Addをクリックするとデータを登録することができます。ためしになにか登録してみましょう。Authorという項目は管理サイト作成時に登録したユーザーネームを指定しておきます。

テンプレートをつかってデータを表示させる

ではこれを表示させます。

HTMLで書く場合、どのページであっても共通部分がかなりあります。そこでテンプレートをつくっておくと便利です。あとになってレイアウトを変えたくなったときに1箇所変更すればすべてに反映させることができます。

そのためにbbsディレクトリ内にtemplatesディレクトリを作成します。そしてそのなかにさらにbbsディレクトリを作成します。「bbsディレクトリなのにまたbbsディレクトリ?」と思うかもしれませんが、そのような仕様になっています。テンプレートのファイルの位置を変更する設定も可能なのですが、今回はデフォルトの設定で使います。

ファイル名もデフォルトの設定であれば決まっていて、以下の名前にします。今回はクラス名をArticleにしたので自動的にarticle_XXX.htmlという名前になります。

base.html すべての元となるページ
article_list.html トップページ
article_detail.html 個別ページ
article_form.html 新規投稿と投稿の編集ページ
article_confirm_delete.html 投稿の削除ページ

最初に全部つくるのは大変なのでトップページと個別ページだけつくります。

base.html

article_list.html

article_detail.html

テンプレートを作成したらbbsディレクトリ内のviews.pyを以下のように変更します。

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

これで投稿一覧と個別ページが表示されるようになります。

次の課題

現段階では新規投稿用のページや更新・削除用のページにアクセスしても文字列が表示されるだけでデータベースに対する処理はおこなわれません。

なぜこれらの処理を後回しにしたかですが、理由があります。想像してほしいのですが、自分の書き込みを他人に削除されたり改変されては困らないでしょうか?

そこで書き込んだ本人でなければ編集や削除はできないようにします。そのためには誰が書き込んだのかを管理できるようにしなければなりません。そのためにはユーザー登録をした人がログインした状態でないと書き込みができないようにします。ログインしても自分のアカウントでなければやはり編集、削除はできないようにします。

これらを実現するためにはログイン機能を実装する必要があります。そこで次回はログイン機能の実装をおこないます。