ユーニックス総合研究所

  • home
  • archives
  • python-django-linebbs-create-app

Django入門: アプリの作成 ~ 簡単な一行掲示板アプリを作る その2【Windows10】

  • 作成日: 2020-10-15
  • 更新日: 2023-12-26
  • カテゴリ: Django

はじめに

この記事は前回の「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などのアプリはポート80443を通じてインターネット上の他のホストとデータをやり取りします。
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が参照するのがこのディレクトリ内のファイルです。

おわりに

今回はアプリを作成しました。
次から実際にプロジェクトにアプリをインストールする所からやってみたいと思います。
お疲れさまでした。