目次
django-admin と manage.py の違い
通常、単体の Django プロジェクトを用いる場合、
django-admin
よりもmanage.py
の方が簡単に利用できるdjango-admin
,manage.py
,python -m django
はすべて同じことができる (startproject
後は)
django-admin.py, django-admin
インストールすると使えるようになる
基本的にどこからでも利用できる
Django を
setup.py
ユーティリティを通じてインストールした場合はdjango-admin
スクリプトはシステムのパスが通っている場所に配置されます。もしパスが通った箇所に存在しなければ、Python インストール先のsite-packages/django/bin
内で見つける事ができます。そのスクリプトに対して、/usr/local/bin
等のパスが通っている場所からシンボリックリンクを張ることを検討してください。新しく Django プロジェクトを作成するときに利用する
Django プロジェクトを作成してしまったら
manage.py
が使えるようになるので出番がなくなる
manage.py
startproject
でプロジェクトを作成すると自動で作成されるDjango が提供する便利な管理コマンドが使えるほか...
よく使う Django 管理コマンド
プロジェクト作成
# プロジェクトのディレクトリに移動する $ cd project_dir # django-admin.py startproject <設定ディレクトリ名> <つくる場所> $ django-admin.py startproject config .
アプリケーション作成
# プロジェクトのディレクトリに移動する $ cd project_dir # python manage.py startapp <アプリケーション名> $ python manage.py startapp account
作成後、 settings.py >
INSTALLED_APPS
に手動でアプリケーションを追加する
マイグレーション
https://docs.djangoproject.com/en/2.2/topics/migrations/
# マイグレーションファイルを作成する # python manage.py makemigrations [<アプリケーション名>] $ python manage.py makemigrations account # 作成される予定のマイグレーションを表示する。実際のマイグレーションファイルは作成されない。 $ python manage.py makemigrations --dry-run # マイグレーションを実行する # python manage.py migrate [<アプリケーション名>] $ python manage.py migrate account # マイグレートするデータベースを指定する。デフォルトは default 。 $ python manage.py migrate --database <DATABASE> $ python manage.py migrate --database hey # 適用済みとして django_migrations にレコードは INSERT されるけれど、データベーススキーマを変更するために実際にSQLを実行することはありません。 $ python manage.py migrate --fake # 自動生成されるマイグレーション名を任意の名前に変更したい $ python3 manage.py makemigrations book --name add_field_to_book # マイグレーションファイルがどこまで migrate されているか確認する $ python3 manage.py showmigrations # shop アプリケーション関連のテーブルを 0001_initial 適用直後の状態に戻したい $ python3 manage.py migrate shop 0001_initial
django_migrations
テーブル: Django がマイグレーション履歴を管理しているテーブル
スーバーユーザー作成
$ python manage.py createsuperuser
-
管理サイト (Django Admin) を使えるユーザー
superuser (システム管理者)
is_staff = True
かつis_active = True
runserver
# 開発用の Web サーバーを起動する # python manage.py runserver [<IPアドレス>:<ポート番号>] $ python manage.py runserver 0.0.0.0:8000 # 自動リロード機能を OFF で起動 $ python manage.py runserver 0.0.0.0:8000 --noreload
-
runserver
: Django に同梱されている軽量の Web サーバー開発時 (基本は DEBUG = True) のみに使われることを想定した WebServer
本番環境では絶対使わない
自動リロード機能
静的ファイルの自動配信機能
IPアドレスとポート番号を省略すると
127.0.0.1:8000
で起動するDocker 上で runserver => ホストOSのブラウザから
127.0.0.1:8000
に接続できないときは、0.0.0.0:8000
で起動してみる
インタラクティブモードで実行する
# こうとか $ python manage.py shell # こうとか $ DJANGO_SETTINGS_MODULE=settings._ python manage.py shell # こう $ python manage.py shell --settings=settings._
Django のプロジェクト設定を読み込んだ REPL を起動してくれる
使用例
$ python manage.py shell --settings=settings._ Python 2.7.7 (default, Dec 11 2017, 18:45:38) [GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from myapp.models import Entry >>> from django.db.models import Q >>> target_entry_id = None >>> Entry.objects.filter( ... Q(expiration_year_month__gte=target_entry_id) | ... Q(expiration_year_month__isnull=True) ... )
Django の DBシェルでローカルDBにつなぐ
$ python manage.py dbshell --settings=settings.local
静的ファイルを公開用ディレクトリに収集する
$ python3 manage.py collectstatic
runserver には静的ファイル自動配置機能が備わっているので runserver 時には事前実行不要
System check framework を使って、Django プロジェクトの一般的な問題を検査する
使用例 (python2)
$ DJANGO_SETTINGS_MODULE=settings.local python -Wd manage.py check
https://docs.python.org/ja/2.7/using/cmdline.html#cmdoption-w
Python 2.7 から、 DeprecationWarning とその子クラスはデフォルトで無視されます。 -Wd オプションを指定して有効にすることができます。