Django入門: アプリの作成 ~ 簡単な一行掲示板アプリを作る その2【Windows10】
目次
はじめに
この記事は前回の「Django入門: 簡単な一行掲示板アプリを作る その1」の続きです。
前回までにDjangoのプロジェクトを作り、manage.py
を実行する所までやりました。
今回から実際にプロジェクトにアプリを作っていきます。
作業の準備
使用するシェルはコマンドプロンプトです。
最初に仮想環境がアクティベートされているか確認してください。
仮想環境がアクティベートされていない場合はvenv\Scripts\activate
を実行して仮想環境をアクティベートします。
それからmanage.py
があるディレクトリにcd
してください。
> dir linebbs manage.py
開発用サーバーを起動してみる
プロジェクトを作成し、manage.py
が使えるようになったので、さっそく開発用サーバーを起動してみたいと思います。
開発用サーバーとは、Djangoの開発時に使うWebサーバーのことです。
本番用サーバーでアプリを動かすにはNginxなどの本番用のWebサーバーを使います。
しかし、開発時には開発情報が細かく出力されるこの開発用サーバーを使うのが普通です。
Webフレームワークにはたいていこの開発用サーバーが組み込まれていて、開発を便利にしてくれます。
Djangoの開発用サーバーを起動するにはmanage.py
にサブコマンドrunserver
を指定します。
そしてrunserver
の引数に0.0.0.0:8123
を指定します。
> python manage.py runserver 0.0.0.0:8123
開発用サーバーの起動に成功すると↓のようなログが出力されます。
> python manage.py runserver 0.0.0.0:8123 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them.
コマンドプロンプトが入力待ちになり、エンターキーなどを押しても反応しなくなりますが、これは正常です。
開発用サーバーを終了させたい場合はCtrl+C
を入力してください。
開発用サーバーを起動した状態で、ブラウザで「http://localhost:8123
」にアクセスすると、↓のような画面が表示されます。
The install worked successfully! Congratulations!
この画面のメッセージは「Djangoのインストールが成功しました! やったね!」という意味ですね。
画面を確認したらCtrl+C
で開発用サーバーを終了します。
0.0.0.0:8123の意味
runserver
の引数の「0.0.0.0:8123
」の意味ですが、これは「0.0.0.0:8123
に開発用サーバーを公開する」と言う意味です。
まず0.0.0.0
というのは特殊なIPアドレスを指します。
これはワイルドカードのようなもので、このIPに開発用サーバーを公開すると、たとえば他のホストからもこの開発用サーバーにアクセスできるようになります。他のホストと言っても、これはLANのホスト、つまり家庭内の他のホストであり、インターネットの不特定多数からアクセスされるということありません(自宅サーバーなどでホストをインターネットに公開している場合は別です)。
それからコロン(:
)は先ほどのIPと次に説明するポート番号のセパレータで区切り文字みたいなものです。
コロンの向こうにある8123
というのはポート番号のことです。
ポートと言うのは、ホストにおけるアプリのデータの出入り口のことです。たとえばNginxなどのアプリはポート80
や443
を通じてインターネット上の他のホストとデータをやり取りします。
Djangoの開発用サーバーではこのポート番号を指定することが可能なので、今回は8123
としています。もちろんこれは9999
とか1234
とかにすることも可能です。その場合は、ブラウザでアクセスするURLのポート番号も合わせて変更してください。
自動作成されるdb.sqlite3
もう一度manage.py
のあるディレクトリ内を見てみます。
するとdb.sqlite3
という見慣れないファイルが作成されています。
python manage.py runserver
を実行するとこのファイルが自動で作成されます。
> dir db.sqlite3 linebbs manage.py
Djangoは特に設定しない場合、デフォルトでデータベースにSqlite3を使います。
Sqlite3とはファイルをデータベース代わりに使えるライブラリです。
このdb.sqlite3
というのはDjangoがSqlite3を通じて作成した、Sqlite3のデータベース用のファイルです。
Djangoの起動には便宜上、データベースが必要なので、runserver
がデータベースを自動で作成したわけですね。
アプリを作成する
Djangoでは1つのプロジェクト内で複数のアプリを管理できます。
プロジェクト内にアプリを作成するにはmanage.py
を使います。
manage.py
にサブコマンドstartapp
を指定して実行すると、startapp
の使い方が表示されます。
> python manage.py startapp usage: manage.py startapp [-h] [--template TEMPLATE] [--extension EXTENSIONS] [--name FILES] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] [--force-color] name [directory] manage.py startapp: error: You must provide an application name.
startapp
に作成したいアプリ名を渡すと、startapp
はその名前でアプリを作成します。
例えば↓のようにです。
> python manage.py startapp myapp
このアプリ名には予約されている名前や、すでに存在する名前は指定できません。
例えばlinebbs
はすでにディレクトリが存在するので、指定しても↓のようなエラーになります。
> python manage.py startapp linebbs CommandError: 'linebbs' conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name.
今回はbbs
というアプリを作成します。
そのため↓のようにコマンドを実行します。
コマンドを実行するとmanage.py
と同じ階層のディレクトリ内にbbs
というディレクトリが作成されます。
> python manage.py startapp bbs > dir bbs linebbs manage.py
このbbs
というディレクトリがDjangoのプロジェクト内におけるアプリです。
中身を観察してみます。
> dir bbs admin.py # 管理ページ用のファイル apps.py # アプリケーションの設定ファイル migrations # マイグレーション用のディレクトリ models.py # モデル用のファイル tests.py # テスト用のファイル views.py # ビュー用のファイル __init__.py # ディレクトリをモジュールと認識させるためのファイル
実際にはこんなコメントはありませんが、私がつけました。
Djangoの開発はアプリごとに分割して管理されます。「分割統治」というやつです。
そのためアプリのディレクトリ内には、アプリを開発するための一通り必要なファイルやディレクトリが入っています。
このアプリ用のディレクトリはプロジェクトから独立していて、取り外しが可能です。
たとえばよそのプロジェクトからアプリを持ってきて、別のプロジェクトにアプリをぶち込んじゃうということも可能です。
実際にそのアプリをDjangoに認識させるには設定が必要なんですが、基本的にはアプリはそういう独立性が高いものだと思っていてください。
また、manage.py
はDjangoにインストールされているアプリに対して操作を行うことが可能です。
その時にmanage.py
が参照するのがこのディレクトリ内のファイルです。
おわりに
今回はアプリを作成しました。
次から実際にプロジェクトにアプリをインストールする所からやってみたいと思います。
お疲れさまでした。