はじめに
このドキュメントは,もともとはラボの新メンバー向けの入門テキストとして作成したもので,はじめてDjangoにふれる人にざっとその全体像をつかんでもらうことを狙っています.Djangoの日本語での参考資料も充実してきたので今さらという気がしないでもないですが,見直しを機にQiitaに移すことにしました.万が一でもどなたかの参考になれば幸いです.
説明のための具体例として,Djangoのオフィシャルチュートリアルにある投票アプリをとりあげています(が,説明上の都合で少しコードを追加,変更しているところもあります).素人の独学がベースで,特に前半は公式チュートリアルをやってみた感想のような記事です(今回は全7回中の1回目).
全体のコードはまとめてGitHubに置きました.
変更履歴
- [2021/04/26] Djangoのバーションを3.2に更新し,それ基づいて内容を微修正しました.
プロジェクトの作成と開発用サーバ
最初に,Djangoのバージョンを確認しましょう.そのためには,Pythonの仮想環境に入って,次のコマンドを打ち込みます.
$ python -m django --version
Djangoでは,プロジェクトという枠の中にいくつかのアプリケーションを格納する構成をとっています.最初に,プロジェクトを1つ作成しましょう.そのためには次のコマンドを打ち込みます(mysiteはプロジェクトの名称です).
$ django-admin startproject mysite
この結果,カレントディレクトリの中にmysiteというディレクトリが作成されます.ディレクトリの構成は下記のようになっています.
mysite/
manage.py (管理コマンドにアクセスするためのファイル)
mysite/
__init__.py
asgi.py
settings.py (プロジェクトの設定ファイル)
urls.py (urlルーティングのためのファイル)
wsgi.py
これでプロジェクトが作成できたので,サーバを立ち上げてブラウザで確認しましょう.Djangoには,開発に便利なように簡単な開発用のサーバが用意されています.これは,外側のmysiteディレクトリに移動して,次のコマンドを打ち込めば立ち上がります.
$ python manage.py runserver
Chromeなどのウェブブラウザを立ち上げて,http://127.0.0.1:8000/ もしくは http://localhost:8000/ を開くと,今作成したプロジェクトの初期ページが表示されるはずです.なお,ポート番号を(例えば8080に)変更したい場合は,
$ python manage.py runserver 8080
ローカル以外のマシンからipアドレスを指定してアクセスできるようにしたい場合は,
$ python manage.py runserver 0:8000
とします.開発用サーバはctrl+c
で停止させることができます.
内側のmysiteディレクトリの中にあるsettings.pyがプロジェクトの設定ファイルです.ファイルの中身をざっと確認しておきましょう.下の方にタイムゾーンの設定があるので,これを日本時間に変更しておきます.
TIME_ZONE = 'Asia/Tokyo'
また,DATABASEという項目があり,既に設定が書かれていることがわかります.これは,DjangoにはSQLiteという軽量DBが標準装備されていて,すぐに使えるようになっているからです.自分で用意した他のデータベースを使いたい場合はそれに対応するようにこの設定を書き換える必要がありますが,そうでなければこのままSQLiteを使えばよいでしょう.
では,SQLiteを使えるようにしましょう.外側のmysiteディレクトリから,次のコマンドを入力します.
$ python manage.py migrate
これでデータベースの構成が初期化されました.外側のmysiteディレクトリの中にdb.sqlite3というファイルが作られているはずです.SQLiteはデータベースの情報をファイルで管理していて,このファイルがデータベースの本体になります(このファイルを消去するとデータベースが消えてしまいます).
次のコマンドで,データベースの管理者を登録しでおきます.
$ python manage.py createsuperuser
開発用サーバを立ち上げて,http://localhost:8000/admin/ にアクセスするとDjangoに標準で用意されているadminサイトが立ち上がります.ここに上で登録したデータベースの管理者でログインすると,データベースの中身を簡単に編集することができます.
おわりに
以上で1回目は終了です.第2回に続きます.