首页 > 编程语言 >Django源码-startproject

Django源码-startproject

时间:2023-03-04 23:22:47浏览次数:49  
标签:遍历 admin django 源码 startproject Django 目录

Django源码-startproject

Django的所有命令都位于django/django/core/management/commands/目录下

一 命令目录

django-admin startproject project_name这个命令在源码里面没有单独的文件;django在安装的时候直接安装到了bin/django-admin

我们在django源码里面django/下创建django-admin.py,把软件目录的代码拷贝过来使用。

#!/home/chen/.virtualenvs/DjangoSource/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from django.core.management import execute_from_command_line  # 这里要确保进入的不是安装好的django而是进入源码里面
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(execute_from_command_line())

二 创建项目

  1. 在django源码的上层目录创建项目,把django当作模块来使用

  2. django-admin starproject demo

三 查看执行过程

  1. django-admin.py

  2. ManagementUtility对象

  3. startproject.Command对象

  4. Command.handle

  5. 执行创建项目

  6. startproject.Command类的继承关系

四 过程描述

创建工程命令时在django-admin中开始的,在Django4中这个命令直接安装在解释器的bin中作为shell命令使用,而不是在源码中。django-admin starproject的作用是创建一个工程,他调用的是django源码中的managemen中的函数创建ManagementUtility对象并调用execute方法,在这个方法中他获取和初步校验命令参数,并做一些参数设置,在这个方法的最重要的是在最后根据参数创建了一个startproject的Command对象,这个startproject中的Command类继承自TemplateCommand和base中的BaseCommand,他的最终结果就是调用Command对象的handle方法根据模板文件去创建项目。在handle方法里先os.getcwd()获取当前目录+项目名作为顶层目录,或者你可以指定目录。接着就是os.walk(template_dir)遍历django.conf目录下的project模板,django用自身的模板引擎替换掉模板中的变量后用with open写入内容。这是django创建项目的基本过程。根据源码你还可以看到一些不常用的参数,像--template,--name等参数

五 疑问和收获

  • pycharm有几个地方标错

    海象运算符和旧版pycharm不兼容

  • os.getcwd

    返回当前进程的工作目录

  • os.walk

    用于通过在目录树中游走输出在目录中的文件名

    os.walk(top[, topdown=True[, one rror=None[, followlinks=False]]])

    • top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。

      • root 所指的是当前正在遍历的这个文件夹的本身的地址
      • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
      • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    • topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。

    • onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。

    • followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录

标签:遍历,admin,django,源码,startproject,Django,目录
From: https://www.cnblogs.com/chenjunmingCNBlogs/p/17179474.html

相关文章

  • Django源码-测试和调试环境搭建
    Django源码-测试和调试环境搭建一创建虚拟环境mkvirtualenv-ppython3.8.10DjangoSource二安装Djangopipinstalldjango==4.0b1三下载源码方法一gitclon......
  • TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
    距离上次学Python写的Python实现简单聊天室已经过去好久了,现在学c++又写了一遍,其实过程差不多,无非是语法的变化,目前仅实现最简单的一对一的通信,然后改就是了,接下来应该是......
  • django终章篇
    从django终章篇1.Cookie和Session1.1基于cookie的登录cookie设置在响应头上,获取在请求头上设置cookie时要先获得一个响应对象(HttpResponse),然后在这个响应对象上......
  • Golang HTTP编程及源码解析-请求/响应处理
    1.HTTP协议HTTP协议是HyperTextTransferProtocol(超文本传输协议)的缩写,基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等)。HTTP是无连接的:无连接的......
  • django基础部分
    django基础部分1.django的安装与执行django安装pip3installdjango==1.11.11利用命令行创建django项目django-adminstartproject项目名利用命令行创建app......
  • django进阶
    django进阶一.Django模板系统1.常用语法只需要记两种特殊符号:{{}}和{%%}变量相关的用{{}},逻辑相关的用{%%}。1.1.变量在Django的模板语言中按此语法使用:{{......
  • Django --python manage
    Django--pythonmanage.pycollectstatic应用场景:线上部署(Linux)注意:执行时,需要与manag.py处于同一路径下作用:执行该命令时,将所有STATICFILES_DIRS中的所有文件夹......
  • 【代理】【六】代理源码解析-Cglib代理-代理文件执行分析
    1 前言上节我们简单看了Enhancer的generateClass和 firstInstance,两个方法的内容也就是创建代理以及生成代理对象的内容,这节我们结合实际生成的文件了解一下代理......
  • 源码编译 - hadoop3.31
    hadoop源码编译一、准备工作1、下载hadoop源码官网地址:https://www.apache.org/index.html#projects-list清华大学镜像网站:https://mirrors.tuna.tsinghua.edu.cn/apa......
  • 重新编译harbor-exporter源码,构建镜像
    1.githubhttps://github.com/c4po/harbor_exporter 2.dockerfileFROMgolang:1.17ENVGO111MODULE=on\GOPROXY="https://goproxy.cn,direct"COPYharbor_exp......