Django教程(为什么选择Django框架)

发布于:2022-11-28 ⋅ 阅读:(382) ⋅ 点赞:(0)

Web 开发是 Python 语言应用领域的重要部分,也是工作岗位最多的领域。如果你对基于 Python 的 Web 开发有兴趣,正打算开始学习使用 Python 做 Web 开发,或者已经是一个 Web 开发者有工作需要,要做自动化运维、数据的图形化展示等,那么学习一门基于 Python 的 Web 开发框架是必修课。

为什么选择Django框架

Python作为当前最火爆最热门,也是最主要的 Web 开发语言,在其二十多年的历史中出现了数十种 Web 框架,比如 Django、Tornado、Flask、Twisted、Bottle 和 Web.py 等,它们有的历史悠久,有的发展迅速,还有的已经停止维护。

 

Django:发布于 2003 年,是当前 Python 世界里最负盛名且最成熟的 Web 框架,最初被用来制作在线新闻的 Web 站点。Django 的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统(依然是可以自定义的),但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决办法。

Tornado:一个强大的、支持协程、高效并发且可扩展的Web服务器,发布于 2009 年 9 月,应用于 FriendFeed、Facebook 等社交网站。它的强项在于可以利用异步协程机制实现高并发的服务。

Flask:Python Web 框架家族里比较年轻的一个,发布于 2010 年,它吸收了其他框架的优点并且把自己的主要领域定义在了微小项目上,以短小精干,简洁明了著称。

Twisted:一个有着十多年历史的开源事件驱动框架。它不像前三种着眼于 Web 应用开发,而是适用从传输层到自定义应用协议的所有类型的网络程序的开发,并能在不同的操作系统上提供很高的运行效率。但是,目前对Python3的支持有限,建议使用Python2.7。

有这么多的 Web 框架,我们没有那么多的精力全都学一遍,也不可能全部精通,必然要有所取舍,那么该如何选择呢?有哪些可以参考的原则呢?

  • 选择更主流的框架。因为它们的文档更齐全,技术积累更多,社区更繁盛,能得到更好的帮助和支持。
  • 选择更活跃的框架。关注项目在 GitHub 等环境中的更新频率、Issue 和 Pull Request 的响应情况。如果一个项目长期没有更新,或者有一堆的问题需要解决但是没有得到响应,就不应该是你学习的对象。
  • 选择能够满足需求的框架。没有最好的框架,只有更合适的框架。你所选择的Web框架不仅需要满足当前的需求,还要充分考虑项目发展一段时间后的情况,即前瞻性,避免盲目选择而导致将来推倒重来的情况。
  • 选择时效性好的框架。在学习和使用框架的时候经常需要查阅和参考各种网络上的文章、博客和教程,但是需要注意他们的发表时间。有些框架的相关文章已经很老了,很久没更新了,应该放弃这种框架;有的框架一直以来都有不断的新文章、新博客出现,就是比较不错的选择。
  • 选择入门友好的框架。这条只对新手适用。详细的框架文档、官方教程对新手来说都是极大的帮助和鼓励。

以上的几条原则不一定正确和完整,但可以作为基本的选择依据,因此推荐大家从 Django 开始学习!作为最知名、应用最广泛、功能最全面的Django,它能够满足从大型到小型各种应用的需求,在GitHub上非常活跃,版本迭代速度也非常快,包含大量的组件和常用工具,网络上的学习和参考文章非常多,是个非常好的选择。另外,对于新手而言,Django有着完整的工具链,不需要你费脑筋去琢磨用哪个不用哪个,更适合入门。简单的比喻,如果说Flask是“DIY组装台式机”,性能优良,性价比高,自定义灵活,但是你得要知道如何搭配平台,如何组装各部件,如何更换部件等等,那么,Django就是“苹果一体机”,你不用管它内部组件是如何搭配,如何安装的,直接开机使用就好了。

想要熟练地使用 Django 进行 Web 开发,设计生产环境可用的,能够应对一定规模访问量的 Web 应用,开发者要学会的远远不止Django本身。Python基础、环境搭建、前端语言、API设计、网站架构、系统管理、持续集成、服务化、数据处理、并发处理等等,都是相关的知识领域,包括但不限于以下的内容:

  • 熟悉 Python 语言
  • 对前端的 HTML\CSS\Javascript 比较熟悉
  • 熟悉数据库、缓存、消息队列等技术的使用场景和使用方法
  • 日常能使用 Linux 或 Mac 系统工作(Windows属于标配)
  • 有性能优化经验,能快速定位问题

除此之外,还要对业务有深刻理解,能够写出可维护性足够高的代码。当然,以上都是对经验丰富的开发者而言,对于新手刚入门者,我们朝着这个目标努力学习就好。

下面是基于 Python 的 Web 开发技术栈:

 什么是框架

Django 在新一代的 Web 框架中非常出色,为什么这么说呢?

为回答该问题,让我们考虑一下不使用框架设计 Python 网页应用程序的情形。贯穿整本教程,我们多次展示不使用框架实现网站基本功能的方法,让同学们认识到框架开发的方便。(不使用框架,更多情况是没有合适的框架可用。最重要的是,理解实现的来龙去脉会使你成为一个优秀的 web 开发者)。

使用 Python 开发 Web,最简单,原始和直接的办法是使用 CGI 标准,在 1998 年这种方式很流行。 现在从应用角度解释它是如何工作:首先做一个 Python 脚本,输出 HTML 代码,然后保存成 .cgi 扩展名的文件,通过浏览器访问此文件。就是这样。

如下示例,用Python CGI 脚本显示数据库中最新出版的 10 本教程: 不用关心语法细节;仅仅感觉一下基本实现的方法:

import MySQLdb

print "Content-Type: text/html\n"
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"

    connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
    cursor = connection.cursor()
    cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

    for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

    print "</ul>"
print "</body></html>"

connection.close()

首先,用户请求 CGI,脚本代码打印 Content-Type 行,后面跟着换行。再接下来是一些 HTML 的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本教程。在遍历这些书的同时,生成一个书名的 HTML 列表项。最后,输出 HTML 的结束标签并且关闭数据库连接。

像这样的一次性的动态页面,从头写起的方法并非一定不好。其中一点:这些代码简单易懂,就算是一个初起步的开发者都能读明白这 16 行的 Python 的代码,而且这些代码从头到尾做了什么都能了解得一清二楚。不需要学习额外的背景知识,没有额外的代码需要去了解。同样,也易于部署这 16 行代码,只需要将它保存为一个 latestbooks.cgi 的文件,上传到网络服务器上,通过浏览器访问即可。

尽管实现很简单,还是暴露了一些问题和不便的地方。问你自己这几个问题:

  • 应用中有多处需要连接数据库会怎样呢?每个独立的 CGI 脚本,不应该重复写数据库连接的代码。比较实用的办法是写一个共享函数,可被多个代码调用。

  • 一个开发人员确实需要去关注如何输出 Content-Type 以及完成所有操作后去关闭数据 库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放相关的工作应该交给一些通用的框架来完成。

  • 如果这样的代码被重用到一个复合的环境中会发生什么? 每个页面都分别对应独立的数据库和密码吗?

  • 如果一个 Web 设计师,完全没有 Python 开发经验,但是又需要重新设计页面的话,又将发生什么呢?一个字符写错了,可能导致整个应用崩溃。理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web 设计师的重新设计不会影响到之前的业务逻辑。

以上正是 Web 框架致力于解决的问题。Web 框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是 Django 所能做的。

传统的MVC设计模式

  • M模型层(Model):主要用于对数据库的封装,方便与数据库的交互
  • V视图层(View):用于向用户展示结果(What+How
  • C控制层(Controller):用于处理请求、获取数据、返回结果

作用:降低模块之间的耦合度(解耦)

Django的MTV模式

是升级版的MVC,解耦程度更大

  • M模型层(Model):负责与数据库交互,Django有一套自己的与数据库交互的规范
  • T模板层(Template):负责呈现内容到浏览器(How
  • V视图层(View):核心,负责接收请求、获取数据、返回结果(What

实际上就是把MVC中的V层拆解成了MTV中的T层和V层,C层变成了url主路由

如何学习该教程

Python所需基础知识:Python3 教程 | 菜鸟教程

Django版本支持

本教程语法和内容适合 Django 2.0,2.1,2.2 及其以后的版本,本教程讲解的是 Django 2.2 版本。

下一教程会更新如何新建Django项目,以及文件配置等等,此教程仅为本人的学习笔记,仅供参考,如有遗漏或错误的地方,欢迎私聊作者改进

本文含有隐藏内容,请 开通VIP 后查看