django 大型网站源码-Django源码阅读(一)项目生成与启动

本文将为您介绍django源码以及django开源相应的知识点。 希望对您有所帮助。 不要忘记为此网站添加书签。

本文内容列表:django是什么

Django 是一个用 Python 编写的开源 Web 应用程序框架。 采用MVT的框架模式,即模型M、视图V和模板T。它最初是为了管理劳伦斯出版集团旗下的一些基于新闻内容的网站而开发的,即CMS(内容管理系统)软件。 并于2005年7月在BSD许可下发布。这套框架以法国吉普赛爵士钢琴家Django Reinhardt的名字命名。

Django项目是一个Python自定义框架,起源于一个在线新闻网站,于2005年开源发布。Django框架的核心组件有:

用于模型创建的对象关系映射

专为最终用户设计的完善管理界面

一流的网址设计

设计师友好的模板语言

缓存系统。

Django(发音:[`dʒæŋɡəʊ])是一个用Python语言编写的开源Web开发框架(opensource webframework),鼓励快速开发并遵循MVC设计。 Django遵循BSD版权,于2005年7月首次发布,并于2008年9月发布第一个即将发布的1.0版本。

Django 以法国爵士音乐家 Django Reinhardt 的名字命名。 他是一位吉普赛人,主要演奏独奏乐器,也演奏小吉他。

由于Django近年来的快速发展,Django的应用越来越广泛。 被知名IT开发刊物SDTimes评选为2013 SDTimes 100,在“API、库和框架”类别中排名第6,被认为是该领域的领导者。

Django 的主要目的是轻松快速地开发数据库驱动的网站。 它指出代码重用,多个组件可以轻松地作为“插件”服务于整个框架。 Django拥有许多强大的第三方插件,你甚至可以轻松开发自己的工具包。 这使得 Django 具有高度可扩展性。 它还指出了快速开发和DRY(DoNotRepeatYourself)原则。

什么是 django?

Django 是一个用 Python 开发的免费开源 Web 框架。 提供了很多网站后台开发常用的模块,让开发者可以专注于业务部分。 并且所涵盖的Web应用部分可以用来快速构建高性能且优雅的网站。 而且,它提供了高度具体的通用Web开发模型,通过DRY的概念为频繁的编程任务提供了快速的解决方案。

Django 开源发布后能够吸引众多追随者,与其以下优点是分不开的:

① 功能齐全。 它附带了大量常用的工具和框架,可以轻松快速地开发功能齐全的Web应用程序。

② 完善的文档。 Django已经发展了十多年django 大型网站源码,拥有广泛的实际案例。 同时,Django提供了既定的在线文档,以便Django用户可以更轻松地找到问题的解决方案。

③强大的数据库访问组件。 Django自带了一个面向对象的映射器,反映了数据模型和关系数据库之间的映射关系。 开发人员无需学习SQL语言即可操作数据库。

④灵活的URL映射。 Django 提供了基于正则表达式的 URL 调度程序,允许开发人员灵活地编写 URL。

⑤ 丰富的模板语言。 Django模板语言功能丰富,支持自定义模板标签; Django还支持使用第三方模板系统,例如jinja2。

⑥健全的后台管理系统。 Django有一个外部后台数据管理系统。 经过简单配置后,只需少量代码即可使用完整的后台管理功能。

⑦完整的错误信息提示。 Django提供了非常完善的错误信息提示和定位功能,可以在开发和调试过程中快速定位错误或异常。

⑧强大的缓存支持。 Django有一个外部缓存框架,并提供了多种可选的缓存方法。

⑨国际化。 Django 包含一个国际化系统,并且 Django 组件支持多种语言。

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

说实话,到目前为止我还不太欣赏django。 在我看来,这不是一个漂亮的设计。 它只是一个由功能堆积起来的“成熟的解决方案”。 但一切的崛起都是时代的选择。 不管你多么不喜欢它,它都是需要的。 希望三天后,python能有更多、更丰富的成熟解决方案,不再因性能和可维护性而被诟病。 (废话结束)

取其精华,去其糟粕,django的优点就是方便。 我们这次阅读源码的目的就是为了探寻它便利性的本质。 计划本次源码阅读不会每个地方都详解,而是以功能为单位进行评估和分析。

django-adminstartprojectHelloWorld 可以生成django项目,命令行为exe格式。

manage.py 将参数传递给命令行进行解析。

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

如果设置了重新加载,它将在启动之前检查_错误。

check_errors() 是一个闭包,因此上面以 (django.setup)() 结尾。

直接看最后一句settings.INSTALLED_APPS。 从设置中获取应用程序

请注意,此设置还不是我们项目中的settings.py。 而是一个对象,位于 djangoconf__init__.py

这是Settings类的延迟加载的封装类,直到__getattr__取值后才进行初始化。 然后从Settings类的实例中获取值。 并且它会把value参数讲到自己的__dict__(最后一次会直接在自己的头上找,因为__getattr__的优先级较低)

为了方便调试,我们直接写一个run.py。 没有命令行的形式。

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

调试抓取设置模块

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

开始观看 apps.populate()

首先看这个

此类App最终会被打包为AppConfigdjango 大型网站源码,并加载到self.app_configs字典中

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

App的加载部分大致是这样的

为了方便调试,我们重写最后一句

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

重点是第二句,我们跳转到run_from_argv()方法,这里处理一些参数。

用pycharm点击这里的句柄,会单步进入通用方法,无法得到正确的方向。 通用 Commond 实际上覆盖了这个技巧。

这里有两种情况。 如果重新加载,会直接执行inner_run(),其他逻辑需要在项目启动时先执行。

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

第一次启动时,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应用程序交给asgi服务器。 (asgi也是django提出的,两者本质上是一样的)

那么这个 wsgi 是从哪里来的呢?让我们回溯一下

这个settings是一个对象,在前面的操作中已经从settings.py配置文件中获取了自己的属性。 所以我们只需要在settings.py配置文件中查找即可。

让我们寻找这个get_wsgi_application()。

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

这是 wsgiapp 本身。

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

如果你读过我之前的 fastapi 源代码,你应该熟悉中间件堆栈。

应用入口→中间件栈→路由→路由节点→端点

因此,wsgiapp建立起来,服务器将请求传入到app入口,然后可以通过中间件分发到路由上。

django源码介绍到此结束。 感谢您花时间阅读本网站的内容。 有关 django 开源和 django 源代码的更多信息,不要忘记在本站搜索。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站源码 django 大型网站源码-Django源码阅读(一)项目生成与启动 https://www.wkzy.net/game/173510.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务