Django使用django-admin startproject [projectname]命令生成project。
django-admin命令行的路徑爲:django/bin/django-admin.py
以django-admin startproject mysite爲例,這將會在當前目錄下生成一個mysite目錄,目錄結構以下: html
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
在project中與manage.py相同的目錄下使用python manage.py startapp [appname]命令生成app。
以python manage.py startapp polls爲例,這將建立一個目錄polls,目錄結構以下: python
polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py
django-admin.py源碼: git
#!/usr/bin/env python from django.core import management if __name__ == "__main__": management.execute_from_command_line()
manage.py源碼: github
#!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
它們都用到了django.core.management這個模塊的execute_from_command_line方法。
主要的區別是manage.py比django-admin.py多了一行:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
用來設置DJANGO_SETTINGS_MODULE這個環境變量爲當前項目的settings文件。 django
經過execute_from_command_line()方法,能夠看到Django命令主要是經過
django.core.management.ManagementUtility類的入口execute()執行。 app
命令執行過程以下: fetch
在django/core/management/commands能夠查看因此的系統命令。 ui
startproject.py和startapp.py都是調用django.core.management.templates.TemplateCommand類的handle()方法進行處理。
二者主要的區別是:template_dir不一樣 url