Django 源码阅读
2019独角兽企业重金招聘Python工程师标准>>>
周末无聊没事做又不想看电影了, 最近刚好学了一下python 并且用django 写了一个公司签到的打卡展示系统。想想就看看django源码好了。 不知道能坚持看多久。记录下
1. 先从github上fork一个。并把fork后的代码弄到本地工程里面。 现在最新的是1.9.4了。 我直接fork master
效果:
总目录下有个__main__.py 应该是比较重要的文件了。点进去
"""
Invokes django-admin when the django module is run as a script.Example: python -m django check"""
from django.core import managementif __name__ == "__main__":management.execute_from_command_line()
注释上写: 当django module 以脚本形式运行是调用django-admin (好吧不太懂)
直接看看 execute_from_command_line 函数做了什么
def execute_from_command_line(argv=None):"""A simple method that runs a ManagementUtility."""utility = ManagementUtility(argv)utility.execute()
新建一个管理工具类。
类太多不贴了 贴个地址 ManagementUtility
到execute 方法里面
def execute(self):"""Given the command-line arguments, this figures out which subcommand isbeing run, creates a parser appropriate to that command, and runs it."""try:subcommand = self.argv[1]except IndexError:subcommand = 'help' # Display help if no arguments were given.# Preprocess options to extract --settings and --pythonpath.# These options could affect the commands that are available, so they# must be processed early.parser = CommandParser(None, usage="%(prog)s subcommand [options] [args]", add_help=False)parser.add_argument('--settings')parser.add_argument('--pythonpath')parser.add_argument('args', nargs='*') # catch-alltry:options, args = parser.parse_known_args(self.argv[2:])handle_default_options(options)except CommandError:pass # Ignore any option errors at this point.no_settings_commands = ['help', 'version', '--help', '--version', '-h','compilemessages', 'makemessages','startapp', 'startproject',]try:settings.INSTALLED_APPSexcept ImproperlyConfigured as exc:self.settings_exception = exc# A handful of built-in management commands work without settings.# Load the default settings -- where INSTALLED_APPS is empty.if subcommand in no_settings_commands:settings.configure()if settings.configured:# Start the auto-reloading dev server even if the code is broken.# The hardcoded condition is a code smell but we can't rely on a# flag on the command class because we haven't located it yet.if subcommand == 'runserver' and '--noreload' not in self.argv:try:autoreload.check_errors(django.setup)()except Exception:# The exception will be raised later in the child process# started by the autoreloader. Pretend it didn't happen by# loading an empty list of applications.apps.all_models = defaultdict(OrderedDict)apps.app_configs = OrderedDict()apps.apps_ready = apps.models_ready = apps.ready = True# In all other cases, django.setup() is required to succeed.else:django.setup()self.autocomplete()if subcommand == 'help':if '--commands' in args:sys.stdout.write(self.main_help_text(commands_only=True) + '\n')elif len(options.args) < 1:sys.stdout.write(self.main_help_text() + '\n')else:self.fetch_command(options.args[0]).print_help(self.prog_name, options.args[0])# Special-cases: We want 'django-admin --version' and# 'django-admin --help' to work, for backwards compatibility.elif subcommand == 'version' or self.argv[1:] == ['--version']:sys.stdout.write(django.get_version() + '\n')elif self.argv[1:] in (['--help'], ['-h']):sys.stdout.write(self.main_help_text() + '\n')else:self.fetch_command(subcommand).run_from_argv(self.argv)
现在明白了注释里面的内容了
好现在我们可以测试一下:
直接运行__main__.py 这个文件。。 好出错了。 包没有导入。
难不倒我, 注释上不是说是django-admin 吗。 我打开bin 目录下的那个django-admin.py . 原来跟这个__main__.py 写的一样的。 运行一下试试。
Type 'django-admin.py help <subcommand>' for help on a specific subcommand.Available subcommands:[django]checkcompilemessagescreatecachetabledbshelldiffsettingsdumpdataflushinspectdbloaddatamakemessagesmakemigrationsmigraterunserversendtestemailshellshowmigrationssqlflushsqlmigratesqlsequenceresetsquashmigrationsstartappstartprojecttesttestserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).
仔细阅读一下 里面可以输入很多参数。
试一下加个参数 management.execute_from_command_line(['','version']) 。 (这里稍微说明一下, 函数里面可以看到 它取的是第二个参数。第一个参数忽略了。 其实如果从命令行输入的话第一个参数是文件名)
也成功输入了 verison
今天就看到这。 其他的参数要配置一下环境了。
转载于:https://my.oschina.net/u/241688/blog/648160
Django 源码阅读相关推荐
- django源码阅读 manage.py文件
Django源码阅读之manager.py文件阅读 我们知道,我们运行一个django项目的时候,需要进入项目的根目录,然后输入命令,python manage.py runserver,这样,我们就 ...
- django源码阅读
最近再看django-bootstrap-toolkit,一直困惑于静态文件的路径问题.所以只能从源码入手了. 从manage.py开始. manage.py 比较简单就几句话. #!/usr/ ...
- Django源码分析9:model.py表结构的初始化概述
django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-model概述 Django项目中提供了内置的orm框架,只需要在models.py文件中添加 ...
- Django源码分析8:单元测试test命令浅析
django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-test命令分析 Django项目中提供了,test命令行命令来执行django的单元测试,该 ...
- Django源码分析7:migrate命令的浅析
django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-migrate命令分析 Django项目中提供了,通过migrations操作数据库的结构的命 ...
- django源码简析——后台程序入口
django源码简析--后台程序入口 这一年一直在用云笔记,平时记录一些tips或者问题很方便,所以也就不再用博客进行记录,还是想把最近学习到的一些东西和大家作以分享,也能够对自己做一个总结.工作中主 ...
- 应用监控CAT之cat-client源码阅读(一)
CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控.对于及时发现线上问题非常有用.(不知道大家有没有在用) 应用自然是最初级的,用完之后,还想了解下其背后的原理, ...
- centos下将vim配置为强大的源码阅读器
每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译.出现问题,还得重新回到windows端,这个过程太耗 ...
- 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
该文章阅读的AFNetworking的版本为3.2.0. 这个分类提供了对请求周期进行控制的方法,包括进度监控.成功和失败的回调. 1.接口文件 1.1.属性 /**网络会话管理者对象*/ @prop ...
最新文章
- 巴菲特的价值投资的第二版本
- 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...
- 去除并替换hselect框右边的箭头的css方法
- leetcode--912--排序数组
- 【数字逻辑设计】核心知识归纳总结
- 三问三答,解传统企业敏捷转型担忧
- TensorFlow:字词的向量表示
- Python Tricks(十六)—— list转换为str
- python matplotlib 保存图片失真_Python matplotlib线框失真
- Java程序员面试宝典--面向对象的基本概念
- threejs 快速入门小技巧
- 税控盘是服务器系统,税控盘系统参数设置服务器设置
- 《哈佛大学公开课:幸福课》学习笔记(3)
- dfasdfad大发
- qt项目在Linux平台上面发布成可执行程序.run
- RPC通信框架——RCF介绍
- 第二十三章 Unity 材质
- 【数据结构】悬空指针和野指针
- AlphaFold2-蛋白质结构预测
- Android压缩图片和libjpeg库