django-admin是Django的一個命令行管理工具,用以對Django項目執行某些命令操作。
1. django-admin安裝
安裝Django后,默認即安裝了django-admin。
Linux系統
默認安裝在$PATH_HOME/dist-packages/django/bin/django-admin.py
Windows系統
默認還在$PATH_HOME/Scripts/中安裝了django-admin.exe和django-admin.py
2. 設置PATH路徑加入django-admin所在位置
Linux系統
export PATH=$PATH;$PATH_HOME/dist-packages/django/bin/
Windows系統
set PATH=%PATH%;$PATH_HOME/Scripts/
后續就可以直接在Shell中執行
django-admin <command> [options]
3. django-admin.py代碼分析
from django.core import management
if __name__ == "__main__":
management.execute_from_command_line()
4. 常見的django-admin命令
diffsettings
startproject
startapp
runserver
testserver
shell
check
test
5. django-admin命令的通用選項
--pythonpath='/python/path'
--settings=mysite.settings
--traceback
--verbosity {0,1,2,3}或-v {0,1,2,3}
-v默認1
--no-color
6. 如果Django項目啟用了django.contrib模塊(默認啟動),則django-admin還可以執行如下命令
1) django.contrib.auth的命令
createsuperuser
changepassword
2) django.contrib.contenttypes的命令
remove_stale_contenttypes
3) django.contrib.gis的命令
ogrinspect
4) django.contrib.sessions的命令
clearsessions
5) django.contrib.sitemaps的命令
ping_google
6) django.contrib.staticfiles的命令
collectstatic
findstatic
7. 在項目代碼中,也可以直接調用django-admin的命令
調用語句:
django.core.management.call_command(command_name, *args, **options)
示例:
from django.core import management
from django.core.management.commands import loaddata
management.call_command('flush', verbosity=0, interactive=False)
management.call_command('flush', '--verbosity=0', interactive=False)
management.call_command('loaddata', 'test_data', verbosity=0)
management.call_command(loaddata.Command(), 'test_data', verbosity=0)
補充:
事實上,在Django項目的代碼中,manage.py文件的功能類似於django-admin,此外manage.py還:
引入sys.path到Django項目
設置DJANGO_SETTINGS_MODULE環境變量指向Django項目中的settings.py
manage.py源代碼如下:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mydjangolists.settings")
try:
from django.core.management import execute_from_command_line
except ImportError:
# The above import may fail for some other reason. Ensure that the
# issue is really that Django is missing to avoid masking other
# exceptions on Python 2.
try:
import django
except ImportError:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
)
raise
execute_from_command_line(sys.argv)
如果沒有對Django進行任何設置,在執行django-admin命令時往往有警告,如下圖所示:
而執行python3 manage.py則會自動應用所在項目的主模塊中的settings.py,如下圖所示:
因此建議使用python3 manage.py ...替代django-admin ...
事實上,如下命令是等價的:
django-admin <command> [options]
python3 manage.py <command> [options]
python3 -m django <command> [options]