问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何阅读django源码(2023年最新整理)

发布网友 发布时间:2024-10-04 19:50

我来回答

1个回答

热心网友 时间:2024-12-02 17:35

导读:本篇文章首席CTO笔记来给大家介绍有关如何阅读django源码的相关内容,希望对大家有所帮助,一起来看看吧。

pythondjango怎么读

Django(发音:[`d???ɡ??])

是用python语言写的开源web开发框架(opensourcewebframework),它鼓励快速开发,并遵循MVC设计。Django遵守BSD版权,初次发布于2005年7月,并于2008年9月发布了第一个正式版本1.0

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手DjangoReinhardt来命名的。

扩展资料:

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。

Django基于MVC的设计十分优美:

1、对象关系映射(ORM,object-relationalmapping):以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库API,同时你也可以在Django中使用原始的SQL语句。

2、URL分派:使用正则表达式匹配URL,你可以设计任意的URL,没有框架的特定限定。像你喜欢的一样灵活。

3、模版系统:使用Django强大而可扩展的模板语言,可以分隔设计、内容和Python代码。并且具有可继承性。

4、表单处理:你可以方便的生成各种表单模型,实现表单的有效性检验。可以方便的从你定义的模型实例生成相应的表单。

5、Cache系统:可以挂在内存缓冲或其它的框架实现超级缓冲--实现你所需要的粒度。

6、国际化:内置国际化系统,方便开发出多种语言的网站。

7、自动化的管理界面:不需要你花大量的工作来创建人员管理和更新内容。Django自带一个ADMINsite,类似于内容管理系统。

Django源码阅读(一)项目的生成与启动

诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)

取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。

django-adminstartprojectHelloWorld即可生成django项目,命令行是exe格式的。

manage.py把参数交给命令行解析。

execute_from_command_line()通过命令行参数,创建一个管理类。然后运行他的execute()。

如果设置了reload,将会在启动前先check_errors。

check_errors()是个闭包,所以上文结尾是(django.setup)()。

直接看最后一句settings.INSTALLED_APPS。从settings中抓取app

注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于django\conf\__init__.py

这是个Settings类的懒加载封装类,直到__getattr__取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的__dict__上(下次会直接在自己身上找到,因为__getattr__优先级较低)

为了方便debug,我们直接写个run.py。不用命令行的方式。

项目下建个run.py,模拟runserver命令

debug抓一下setting_mole

回到setup()中的最后一句apps.populate(settings.INSTALLED_APPS)

开始看apps.populate()

首先看这段

这些App最后都会封装成为AppConfig。且会装载到self.app_configs字典中

随后,分别调用每个appConfig的import_models()和ready()方法。

App的装载部分大体如此

为了方便debug我们改写下最后一句

res的类型是Commanddjango.contrib.staticfiles.management.commands.runserver.Commandobjectat0x00000101ED5163A0

重点是第二句,让我们跳到run_from_argv()方法,这里对参数进行了若干处理。

用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。

这里分为两种情况,如果是reload重载时,会直接执行inner_run(),而项目启动需要先执行其他逻辑。

django项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。

第一次启动时,DJANGO_AUTORELOAD_ENV为None,无法进入启动逻辑。会进入restart_with_reloader()。

在这里会将DJANGO_AUTORELOAD_ENV置为True,随后重启。

第二次时,可以进入启动逻辑了。

这里创建了一个django主线程,将inner_run()传入。

随后本线程通过reloader.run(django_main_thread),创建一个轮询守护进程。

我们接下来看django的主线程inner_run()。

当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了

这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)

那么这个wsgi是从哪来的?让我们来稍微回溯下

这个settings是一个对象,在之前的操作中已经从settings.py配置文件中获得了自身的属性。所以我们只需要去settings.py配置文件中寻找。

我们来寻找这个get_wsgi_application()。

它会再次调用setup(),重要的是,返回一个WSGIHandler类的实例。

这就是wsgiapp本身。

load_middleware()为构建中间件堆栈,这也是wsgiapp获取setting信息的唯一途径。导入settings.py,生成中间件堆栈。

如果看过我之前那篇fastapi源码的,应该对中间件堆栈不陌生。

app入口→中间件堆栈→路由→路由节点→endpoint

所以,wsgiapp就此构建完毕,服务器传入请求至app入口,即可经过中间件到达路由进行分发。

如何阅读django-rest源码

webservice其实就是webapi,不过为了便于统一使用了通用的数据格式,比如xml。所以你完全可以自己使用一个第三方xml库来自己构建这样的环境,或者使用djangorestframework这样的第三方app来直接帮你快速开发

c#项目可以转化为python吗

c#项目可以转化为python。根据查询相关资料信息Python与C#一样,能够很好地支持面向对象的编程模式。

1、学习python语法,完成python。cookbook上的代码。目标熟悉python语法和开发习惯,以及调试方法。

2、学习使用Django框架,完成一个基于Django框架的项目,发布到github上。目标上手网站开发。

3、有时间阅读下Django源码,了解其MVC框架的实现原理和ORM的方法。目标培养阅读代码的能力,仔细感受一下优秀的开源框架。

4、python实现-遍设计模式。目标虽然常用的设计模式都有所了解,但是用到的只有有限的几个。在以后的阅读开源框架时要注意积累。

5、熟悉pyunit的使用。目标了解pyunit的简单使用。目前就想到这些,欢迎各路大侠提建议。手头的winform项目完成后,正式转python。

结语:以上就是首席CTO笔记为大家整理的关于如何阅读django源码的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于如何阅读django源码的相关内容别忘了在本站进行查找喔。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
win7窗口淡入淡出慢 iPhone 小技巧:如何将 Safari 浏览器中的网页添加到桌面? 锰粉是什么颜色的金属 铁精粉的常见颜色是什么 烟花爆竹中的金属粉末如何使其呈现绚丽色彩? 金粉有哪些种类 灰土每层回填最大厚度 灰土基础简史 如何让一个喜欢你的女孩讨厌你! 西环里新区基本资料 㫒,这个字怎么读啊? 跑步机失误怎么办 什么的北戴河四个字的成语 Nginx配置文件揭秘:掌握核心设置,让网站飞一般地运行! 刚才发了一个梦,梦见我老爸不行了,还梦见正在和他做丧事,怎么办? ...父母住的旧房子还在,进去问老爸说是搬出去了,老妈在 昨天晚上我梦见我姐我爸我们在外面玩突然老爸不见了我很急到处找最后... 晚上我做梦,梦见老家的房子塌了,好像砸到人了,把我老爸当人质了,说让... 孕妇吃苹果小孩皮肤好吗 新疆最值得去的十大景点 北京免费房车露营地点推荐,北京夫妻房车自驾旅游 电脑的两个灯都亮了,然后总是蓝屏,是什么问题啊 ...主机上电源灯正常是一个蓝灯长亮一个红灯不停的闪...黑屏之后红灯不... 细胞因子检测可以用哪些方法,简述其原理,在实际应用中如何选择用哪一... 深圳高速工程顾问有限公司公司简介 深圳高速公路工程顾问有限公司 待遇怎么样 我是助工(2年施工,1.5年设计... 带你全面了解细胞因子! 梦见蛇的身长有拾多米长,我將它放生時它輕輕的咬了我一下 ...你千年后来报仇"啥意思啊?大家帮忙指点下什么意思啊!!! thinkpad如何进入安全模式呢? 殷什么不什么的词语有哪些? 九龙治水古语意思 5牛耕地九龙治水什么意思 【九兰】 注册公司必须开通税务么 塔吊电压过高会引起漏电开关跳闸吗 天津塘沽那边有什么好玩的地方 论文预答辩不通过怎么办? 我要悲哀一点的女生pp昵称,有没有 ...不知道公母。有一只总喜欢把另一只翻过来弄他pp那里…这是什么意思... 求别人发红包的句子 如何在桌面实现悬浮窗口的效果? win7桌面的浮动窗口怎么弄啊?谁会,教教我。就是像苹果那样的,悬浮在... 怎么在桌面做一个悬浮可以自己动的图片像瑞星狮子一样的 车牌号最后一位数字是0好不好 车牌号最好的数字有哪些 手把手教你从零跑一个Skynet,详细教程,含案例讲解 ...赵文卓半斤八两,甄子丹这全美冠军还要去北京武术队的就不咋样了... 子宫出血中医叫什么 子宫出血治疗方法 平价好穿高跟鞋品牌 市面上有哪些优雅知性的高跟鞋款式值得入手?