51Testing软件测试论坛

标题: Django1.8 django-admin和manage命令简要分析 [打印本页]

作者: 海鸥一飞    时间: 2019-1-24 16:28
标题: Django1.8 django-admin和manage命令简要分析
startproject和startapp创建一个项目(Project)

Django使用django-admin startproject [projectname]命令生成project。
django-admin命令行的路径为:django/bin/django-admin.py
以django-admin startproject mysite为例,这将会在当前目录下生成一个mysite目录,目录结构如下:

  1. mysite/
  2.     manage.py
  3.     mysite/
  4.         __init__.py
  5.         settings.py
  6.         urls.py
  7.         wsgi.py
复制代码

创建一个应用(App)

在project中与manage.py相同的目录下使用python manage.py startapp [appname]命令生成app。
以python manage.py startapp polls为例,这将创建一个目录polls,目录结构如下:

  1. polls/
  2.     __init__.py
  3.     admin.py
  4.     migrations/
  5.         __init__.py
  6.     models.py
  7.     tests.py
  8.     views.py
复制代码

django-admin.py与manage.py工作原理

django-admin.py源码:

  1. #!/usr/bin/env python
  2. from django.core import management

  3. if __name__ == "__main__":
  4.     management.execute_from_command_line()
复制代码

manage.py源码:

  1. #!/usr/bin/env python
  2. import os
  3. import sys

  4. if __name__ == "__main__":
  5.     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

  6.     from django.core.management import execute_from_command_line

  7.     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文件。


命令执行过程分析

通过execute_from_command_line()方法,可以看到Django命令主要是通过
django.core.management.ManagementUtility类的入口execute()执行。


命令执行过程如下:


Command命令

在django/core/management/commands可以查看所以的系统命令。

startproject.py和startapp.py都是调用django.core.management.templates.TemplateCommand类的handle()方法进行处理。
两者主要的区别是:template_dir不同







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2