草庐IT

Django 简介和版本介绍

Linux huaxiayuyi 2023-04-19 原文

一、简介


官方地址:https://www.djangoproject.com

Django 是一个由Python 编写的具有完整架站能力的开源Web框架。使用 Django,只要很少的代码,开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。

Django 本身基于MVC 架构,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开发快捷、部署方便、可重用性高、维护成本低等优点。

Django 诞生于2003年,2006年加入了BSD许可证,成为开源的Web 框架。Django 这一词语是根据比利时的爵士音乐家 Django Reinhardt 命名的,含有希望Django 能够优雅地演奏(开发)各种乐曲(Web应用)的美好含义,和著名的电影《姜戈的解放》无关。

Django 是由美国堪萨斯(Kansas)州Lawrence 城中的一个新闻开发小组开发出来的。当时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和 Simon Willison 在用 Python 编写Web新闻网站,他们的 World Online 小组制作并维护了当地的几个新闻站点。新闻界独有的特点是迭代迅速,从开发到上线,通常只有几天或几个小时的时间。为了能在截止时间前完成工作,Adrian 和 Simon 不得不开发一种通用的高效的网络应用开发框架,也就是Django。

2005年的夏天,当这个框架开发完成时,它已经用来制作了很多个 World Online 的站点。不久,小组中的 Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。短短数年,Django 项目就有了数以万计的用户和贡献者,在世界范围内广泛传播。 原来的 World Online 的两个开发者(Adrian and Jacob)仍然掌握着 Django,但是其发展方向受社区团队的影响更大。

Django 具有以下特点

  • Django 是一个全栈Web 框架。所谓全栈框架,是指除了封装网络和线程操作,还提供 HTTP 请求和响应、数据库读写管理、HTML 模板渲染等一系列功能的框架。你可以不太准确地理解为全栈工程师包办了前后端和数据库访问的所有开发工作,整个网站都是一个人搭建的。
  • 功能完善、要素齐全。该有的、可以没有的都有,常用的、不常用的工具都提供。Django 提供了大量的特性和工具,无须你自己定义、组合、增删及修改。但是,在有些人眼里这被认为是臃肿不够灵活,发挥不了程序员的能动性。
  • 完善的文档。经过长期的发展和完善,Django有广泛的实践经验和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
  • 强大的数据库访问 API。Django 的Model 层自带数据库ORM 组件,开发者无须学习其他数据库访问技术(例如SQLALchemy)。当然你也可以使用 SQLALchemy,甚至不适用ORM 组件。
  • 灵活的路由系统。Django 具备路由转发、正则表达式、命名空间、URL反向解析等功能。
  • 丰富的Template 模板功能:Django 自带类似 jinjia 的模板语言,不但原生功能丰富,还可以自定义模板标签和过滤器。并且以类似Python 的调用机制和视图默契配合。
  • 自带后台管理应用admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。这是Django 最受欢迎的功能。
  • 完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django 可以提供非常完整的错误信息帮助定位问题。

MVC及MTV设计模式

  • 在目前基于Python 语言的几十个Web开发框架中,几乎所有的全栈框架都强制或引导开发者使用MVC 设计模式。

MVC设计模式

  • 最早由 Trygve Teenskaug 1978年提出,上世纪80年代是程序语言 Smalltalk 的一种内部架构。后来MVC 被其他领域借鉴,成为了软件工程中的一种通用架构模式。MVC 把Web框架分为三个基础部分

模型(Model)

  • 用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web 应用程序中用于处理应用程序的数据逻辑的部分,Model 只提供功能性的接口,通过这些接口可以获取Model的所有功能。白话说,这个模块就是业务逻辑和数据库的交互层,定义了数据表。

视图(View)

  • 负责数据的显示和呈现,是对用户的直接输出。

控制器(Controller)

  • 负责从用户端收集用户的输入,可以看成提供View的反向功能。
  • 这三个部分互相独立,但又相互联系,使得改进和升级界面及用户交互流程,在Web 开发过程任务分配时,不需要重写业务逻辑及数据访问代码。
  • MVC在Python 之外的语言中也有广泛应用,例如 VC++的MFC,Java 的Structs 及Spring、C#的.NET开发框架,都非常有名。

MTV设计模式

  • MTV 和 MVC 本质上是一样的。
  • Django 对传统的MVC 设计模式进行了修改,将视图分成View 模块和 Template 模块两部分,将动态的逻辑处理与静态的页面展示分离开。
  • 而Model采用了ORM技术,将关系型数据库表抽象成面向对象的 Python类,将数据库的表操作转换成Python 的类操作,避免了编写复杂的SQL语句。

模型(Model)

  • 和MVC 中的定义一样。

模板(Template)

  • 将模型数据与HTML 页面结合起来的引擎。

视图(View)

  • 负责实际的业务逻辑实现Django 的MTV 模型组织。

 

二、Django 版本


Django 是基于Python的Web 框架,依赖Python 环境,所以需要提前安装好Python 解释器。

建议安装长期支持 LTS 版本的 Python。

Django 官方版本查看

Django 各版本对Python 版本的依赖关系

Django 版本 Python 版本
3.1 3.6, 3.7, 3.8, 3.9 (added in 3.1.3)
3.2(LTS) 3.6, 3.7, 3.8, 3.9, 3.10 (added in 3.2.9)
4.0 3.8, 3.9, 3.10
4.2(LTS) 3.9, 3.10

Django 本身的版本规划时间图如下所示

未来版本的计划节点

从上表中可以看出Django 的版本更新迭代非常快,大版本号几乎两年加一。

实际上,对于非重度用户,Django 的版本差别并没有你想象中那么大,完全不必为版本的问题头疼。

 

 

有关Django 简介和版本介绍的更多相关文章

  1. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  2. ruby-on-rails - 在 ruby​​ .gemspec 文件中,如何指定依赖项的多个版本? - 2

    我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这

  3. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  4. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  5. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  6. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  7. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  8. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  9. ruby-on-rails - 安装多个版本的 Rails 会覆盖以前的安装吗? - 2

    如果我一直输入geminstallrails使用不同版本的Rails会怎样?例如,我可以输入:geminstallrails--verson3.2.10或geminstallrails这给了我版本3.2.12。问题每次安装都会覆盖之前的吗?它会删除所有旧文件并添加我正在安装的新版本吗?或者如果我运行它两次,它会保留一些文件吗?我正在使用Ubuntu。 最佳答案 它将安装两个独立的gem。实际的可执行文件rails将调用最新版本。你可以覆盖它__例如,rails_3.2.10_将执行Rails3.2.10。bundler顺便说一下,如

  10. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

随机推荐