前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django1.8 django-admin和manage命令简要分析

Django1.8 django-admin和manage命令简要分析

作者头像
donghui
发布2019-04-19 15:12:36
6250
发布2019-04-19 15:12:36
举报
文章被收录于专栏:donghui的博客donghui的博客

startproject和startapp

创建一个项目(Project)

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

代码语言:javascript
复制
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
创建一个应用(App)

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

代码语言:javascript
复制
polls/
    __init__.py
    admin.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

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

django-admin.py源码:

代码语言:javascript
复制
#!/usr/bin/env python
from django.core import management

if __name__ == "__main__":
    management.execute_from_command_line()

manage.py源码:

代码语言:javascript
复制
#!/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文件。

命令执行过程分析

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

命令执行过程如下:

  1. 解析命令,获得要执行的子命令名称(如startapp)。  subcommand = self.argv[1]
  2. 找出subcommand的完整路径  self.fetch_command(subcommand)  其中fetch_command调用get_commands从下面几个地方找命令:
    • django/core/management/commands目录下的命令文件
    • project//management/commands/目录下的命令文件
  3. 根据返回的subcommand实例,执行run_from_argv()方法:  self.fetch_command(subcommand).run_from_argv(self.argv)  从django.core.management.base.BaseCommand中可知run_from_argv()方法的调用过程:  run_from_argv() -> execute() -> handle() handle()方法执行的结果就是最后的返回。

Command命令

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

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

  • project的template目录:django.conf.project_template
  • app的template目录:django.conf.app_template

参考

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015/11/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • startproject和startapp
    • 创建一个项目(Project)
      • 创建一个应用(App)
      • django-admin.py与manage.py工作原理
      • 命令执行过程分析
      • Command命令
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档