简介
这节课开始我们来学习 Python 最热门的 Web 框架 - Django,以及 Django 最强大的插件 DRF(Django RestFramework)大家也可以查看 Django 的官方文档 与 Django RestFramework 的官方文档,了解 Django 最新的内容。
Django 诞生于 2005 年,到今年已经更新到了 Django 4 版本。本系列课程使用的是 Django 4.2 LTS 版本,支持 Python 3.8、3.9 与 3.10。在企业开发中,我们一般会选择长期维护版本,比如 3.2、4.2 以及未来的 5.2。下图是 Django 的不同版本的维护时间。
Django 是最流行的 Python Web 框架,它旨在帮助开发者构建高效、可扩展且易维护的 Web 应用程序,最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。Django 遵循 MVT
架构模式,即模型(Model)、视图(View)和模板(Template)。
我们在招聘软件上搜索 Python Web 相关的工作,就可以发现,基本上使用 Python 进行 Web 开发的企业,基本上使用的都是 Django,使用的人数多,我们在遇到问题的时候,就越容易找到解决办法。
这里是 Django 的一些关键组件和概念:
模型(Model)
:模型表示数据库中的数据结构,它定义了数据的字段和关系。Django 的模型使用 Python 类来描述,并通过这些类可以轻松地创建、查询和操作数据库表。视图(View)
:视图负责处理用户请求,并返回适当的响应。它们是 Django 应用程序中处理业务逻辑的地方,可以从数据库中获取数据并将其传递给模板进行渲染,然后返回渲染后的结果给用户。模板(Template)
:模板是呈现给用户的 HTML 页面,它可以包含动态的内容和模板标签,用于展示来自视图传递的数据。URL 映射
:Django 使用 URL 映射将用户的请求路由到相应的视图函数。这个映射定义在项目的 urls.py 文件中,通过将 URL 与视图函数关联起来,Django 知道如何处理来自用户的请求。中间件(Middleware)
:中间件是 Django 处理请求和响应的钩子。它可以在请求到达视图之前或响应返回给客户端之后执行预处理或后处理操作。表单(Form)
:Django 提供了强大的表单处理功能,可以轻松地创建和验证表单。这对于用户提交数据非常有用,例如登录、注册和搜索。管理员后台
:Django 自动生成一个功能强大的管理后台,让你可以轻松地管理数据库中的数据,包括添加、编辑和删除数据记录。静态文件管理
:Django 支持管理静态文件(如 CSS、JavaScript 和图像),使其在应用程序中使用更加简单。
Django 是一个开源项目,它拥有一个庞大的社区,提供了大量的文档和资源,使得它成为一个非常受欢迎的 Web 框架。使用 Django,你可以快速构建功能丰富、安全可靠的 Web 应用程序,并且不需要从头开始编写许多常见的功能,因为 Django 已经帮你处理好了。
本套教程是在 Windows 系统下进行开发学习的,因此,大家不需要安装虚拟机或者 Linux 系统。在实际的工作开发中,大部分公司使用的 Windows 系统,只有在部署阶段,才会通过 SSH 远程连接,把项目部署到 Linux 系统的服务器上。这是因为在实际工作中,除了敲代码之外,与其他同事交流、汇报工作、制作 PPT 等等,都需要用到 Windows 系统下才有的软件。不论是安装双系统还是使用虚拟机,都无法很好地解决这个问题,因此,大多数人还是选择了在 Windows 系统下开发。
为什么选择 Django,而不是 Flask、FastAPI?
从市场应用层度来看:Django > Flask > FastAPI
,意味着 Django、Flask 有更多工作机会很多公司都在用 Django,甚至用 Django 来开发应用,比如 Youtube、Spotify、Instagram、Linkedin 等,因此 Django 的工作机会更多。不行你去翻翻招聘网站 Python web 开发的能力要求,很多都是需要 Django 经验,尤其是 DRF 经验,就像 Java 的 Spring。
从框架完整性来看:Django > Flask > FastAPI
,意味着 Django 可以开发更复杂的应用。Django 自带大量常用工具和框架,可轻松、迅速开发出一个功能齐全的 Web 应用。而且 Django 有健全的后台管理系统。Django 内置了一个后台数据管理系统,经简单配置后,再编写少量代码即可使用完整的后台管理功能。从社区活跃度、文档丰富度来看,Django 也是做的最好的,对开发人员来说很适合作为主力工具。
从轻量化层度来看:FastAPI = Flask > Django
,意味着 FastAPI、Flask 更容易入手 FastAPI、Flask 都是轻量级的后端框架,适合初学者入门学习,并迅速搭建应用。这里要强调一点,FastAPI 是添加 Web API 支持的二次框架,和 Django、Flask 这类通用型框架并不是一个物种。因此学习 Python 后端只适合在 Django 和 Flask 中做选择,或者 Tornado、Starlette 之类。Django 具有使代码可重用的大多数软件包,是一个完整的 Web 开发框架,而 Flask 和 FastAPI 是用于构建网站的简约框架,很多功能比如用户系统,后台管理要自己实现。
下图对比了 Django 与 Flask 的优缺点:
如果你的项目很小、并且后期也并不需要维护的话,那就无脑选择 Flask、FastAPI,但是,如果你有长期维护的打算的话,还是建议学习 Django,因为无论使用再轻量化的 Web 框架,维护到后期,都会变成 Django 的样子。
如何学习 Django?
Django 相比于其他语言的 Web 框架而言,应该算是最容易上手的 Web 框架了,前提是掌握了 Django 正确的学习方式:前后端分离,使用 Drf、Django Ninja 做后端,或者使用 Django 自带的 Admin 站点做后台管理,毕竟 2023 年了,靠 Django 模板写前端实在是指望不上。正规的互联网公司现在前端还有用 Ajax 的吗?学了这玩意,既浪费时间,又浪费精力,还找不到工作。
我们可以打开各大
如果你真的想学 Django 后端开发,你应该学 Django RestFramework + MySQL + Redis + 容器化技术 + OSS 对象存储服务等等,而不是后端学了一点皮毛 + 前端学了一点皮毛,我就问你,只会 HTML + CSS + JS 能找到工作吗?
如果你想搭建个人项目的话,前端能不用框架吗?前端用了框架,你后端不就做个接口吗,而 DRF 就是基于 RESTful 的设计理念,而且,你还可以沿用 Django Admin,你直接就不用写后台的页面和接口了呀,不过,问题就是自用可以,但是你如果想要给客户用的话,可以使用 Django-Vue-Admin。
在你学习 Django 的时候,前端你压根就不应该遇到,测试的时候直接使用 APIPost 和后端做交互就行了,企业开发的过程中,你也很少接触到前端的代码的。
怎样成为全栈工程师?
首先,如果你是单纯为了工作,没有任何其他目的的情况下,我不建议您成为一名全栈工程师!
虽然说 Django 是一个全栈框架,但是 Django 的 MVT 模式真的已经过时了,而且不易于维护,根据我的工作经验总结了一个国内当下环境最高效最容易上手的全栈选型:Vue + Python
后端为什么选 Python?
- Python 的教程多。大家在 B 站等平台都可以看到大量的优质的 Python 教程,比某些付费的培训机构强的多!
- 应用范围广,爬虫,写脚本,软测,算法 AI 都用它。就 Web 开发而言,Python 有 Django、Flask、FastAPI 等多个开发框架。Django 与 Flask 的生态十分友好,因此首推 Django 与 Flask。Python 拥有海量的第三方库,可以满足你多方面需求!明明一个 Python 就能搞定的问题,为什么我非要学 Java/PHP 做 Web 开发,然后再学 Python/C 封装 SDK?
- 上手最简单!上手简单就意味着你入门快,入门快就意味着你的时间成本可以降低。
前端为什么选 Vue?
- 容易上手。目前 Vue 是排名第三的前端框架。正是因为他简单易学,很多前端开发工程师可以很快掌握并且应用到实际开发中。
- 良好周边以及社区。作者是中国人,中文论坛更完善。大大降低了前端工程师的入职门槛。
- Uni-app 支持 Vue 做微信小程序和 APP,我想你搞全栈,肯定不会只想开发网页端的应用吧,Uni-app 可以帮你完成初步的小程序和 app 的制作,也方便你日后将用户引流到自己的 app 中。
- Electron 开发桌面应用。
成为全栈务必要掌握以下技能:
前后端框架
务必要掌握。- 如果你选择了 Python 作为后端开发语言,Django、Flask 和 FastAPI 是你在现阶段最佳的选择,就因为生态好,没有别的原因,你一个框架写在再完美,没有开发者,没有学习资源,没有社区都是空谈!我建议初学者选 Django,因为功能性强,并且 Django 有用自带的管理后台,可以让你减少前端页面的设计。Flask、FastAPI 是趋势, 考虑到 Web 开发行业在过去五年左右的时间里一直朝着较小的框架,微服务和
无服务器
平台发展的趋势。但是,站在一个全栈开发者的角度上看,Django 具有一切框架无法比拟的优势!自带单元测试方法和后台管理!再添加一个后台插件 xadmin 、Simple-UI Django RestFramework
. 如果你选择了 Django, 那么 Django RestFramework 也是你必定要学的,DRF 为你提供了 API 开发规范和模板,数据的序列化,API 可视化,基于类视图的更强大的视图集等等。- 关系型数据库
MySQL
. 搞后端如果不会数据库,那就如同前端不会 JS。 - 非关系型数据库
Redis
,用来储存一些用户读写频率高的数据。 Linux
,我用的最多的是 Ubuntu18.04, 其次是 CentOS. 在这里我推荐大家多学习学习 Ubuntu 操作系统,方便前期项目的部署,尤其是在你学习 Docker 之前。前期大家可以用一下虚拟机。我现在一般是在 Windows 下开发,其实没有太大差别。Git
,代码版本管理必备,国内就连 Gitee, 国外就用 GitHub。
额外学习内容:
Docker
:可以方便你做很多事情,用的人都说好。为什么我一定要用Docker呢?因为我的电脑不仅仅需要做开发,还需要设计原型图,登录企业微信等等软件,很多软件在Linux下无法使用,工作最重要的是沟通,而不是闭门造车。而且虚拟机实在是太卡了,我的电脑内存32G分配给虚拟机24G,都于事无补。Docker Compose/K8s + Rancher
. 这个东西我就不多讲了,在你学完 Docker 的之后,自然就会明白。OSS 对象存储服务 Minio
. 如果你有大量的图片等资源存储,你就需要自己搭建一个对象存储服务了,或者你也可以上一些云服务器平台购买服务。