Django讲课笔记01:初探Django框架

文章目录

  • 一、学习目标
  • 二、课程导入
    • (一)课程简介
    • (二)课程目标
    • (三)适用人群
    • (四)教学方式
    • (五)评估方式
    • (六)参考教材
  • 三、新课讲授
    • (一)Django简介
    • (二)Django版本
      • 1. Django 1.11(2017年3月发布)
      • 2. Django 2.0(2017年12月发布)
      • 3、Django 2.1(2018年8月发布)
      • 4、Django 2.2(2019年4月发布)
      • 5、Django 3.0(2019年12月发布)
      • 6、Django 3.1(2020年8月发布)
      • 7、Django 3.2(2021年4月发布)
      • 8、Django 4.0(2022年12月发布)
      • 9、Django 5.0(2023年12月发布)
    • (三)Django与Python的对应关系
    • (四)Django的特点
    • (五)MVC模式
      • 1、MVC概念
      • 2、MVC示意图
      • 3、MVC优势
    • (六)MVT模型
      • 1、MTV定义
      • 2、MTV示意图
      • 3、MTV优势
    • (七)Web开发前端和后端
      • 1、Web前端开发
      • 2、Web后端开发
  • 四、课堂小结

一、学习目标

  1. 了解Django框架
  2. 了解Django版本与Python版本的对应关系
  3. 了解Django的特点
  4. 了解MVC模式的优势
  5. 了解MTV模式的优势

二、课程导入

(一)课程简介

  • Django是一款基于Python语言的开源Web应用框架,以其高效、简洁的设计而备受开发者欢迎。本课程旨在向学生介绍Django框架的基本概念、核心特性以及与Python语言的结合。在学习Django之前,建议学生具备HTML、CSS和JavaScript的基础知识,以更好地理解和应用框架。

(二)课程目标

  1. Django框架基础: 学生将了解Django框架的核心概念,包括模型(Model)、视图(View)、模板(Template)等。
  2. 版本与对应关系: 学习Django不仅需要了解其基础,还需要明确不同版本与Python版本之间的对应关系,确保在实际开发中选择合适的环境。
  3. Django特点: 了解Django的特点,包括对象关系映射(ORM)、URL设计、模板系统等,为构建高效的Web应用奠定基础。
  4. MVC与MVT: 对比传统的MVC(Model-View-Controller)模式和Django采用的MVT(Model-View-Template)模式,理解其优势和适用场景。

(三)适用人群

  • 本课程适合有一定Python编程基础,同时对Web开发有兴趣的学生。特别推荐已经学习过HTML、CSS和JavaScript的同学,以更好地理解Django框架的前后端交互。

(四)教学方式

  1. 理论讲解: 介绍Django框架的基本概念、版本与对应关系、特点以及MVT模型等。
  2. 实际操作: 通过实例演示,带领学生搭建Django开发环境,创建简单的Web应用,并进行基本的功能开发。
  3. 项目实践: 学生将参与一个小型Django项目,通过实际开发提升对框架的熟练程度。

(五)评估方式

  1. 考勤: 占总成绩20%,要求学生积极参与课堂讨论和实际操作。
  2. 作业: 占总成绩30%,包括完成课后作业、小项目以及相关实践任务。
  3. 期末检测: 占总成绩50%,考察学生对Django框架的理解程度,包括理论知识和实际应用能力。

(六)参考教材

  • 《精通Django 3 Web开发》
    在这里插入图片描述
  • Django 4 中文教程(https://www.w3cschool.cn/django4/)
    在这里插入图片描述
  • 通过本课程的学习,学生将建立起对Django框架的深刻理解,为未来的Web开发工作奠定坚实的基础。

三、新课讲授

(一)Django简介

  • Django,诞生于2005年7月,是一款遵守BSD版权的开源Web应用框架。以其MVT设计模式著称,模型(Model)、视图(View)和模板(Template)的巧妙结合使得Web开发更为高效。Django不仅提供了强大的对象关系映射(ORM)功能,还拥有灵活的URL设计和可扩展的模板系统。作为Python语言的杰出代表,Django在构建高质量、可维护性强的Web应用方面表现出色。

(二)Django版本

在这里插入图片描述

  • Django是一个开源的Web应用框架,自2017年以来,经历了多个版本的演化和更新,不断提升其功能和性能。以下是Django从2017年到2023年的主要版本演化情况:

1. Django 1.11(2017年3月发布)

  • 引入了Subquery表达式,增强了数据库查询功能。
  • 提供了更好的Template模块,改进了模板渲染引擎。

2. Django 2.0(2017年12月发布)

  • 弃用了对Python 2的支持,仅支持Python 3.4及以上版本。
  • 引入了path()和re_path()等新的URL模式匹配函数。
  • 改进了Model和QuerySet,增加了新的数据库特性。

3、Django 2.1(2018年8月发布)

  • 加强了对Python 3.7的支持。
  • 引入了django.db.models.JSONField,提供对JSON数据的原生支持。
  • 增加了django.test模块中的新功能,简化了测试流程。

4、Django 2.2(2019年4月发布)

  • 提供了对MariaDB数据库的支持。
  • 引入了django.test.Client的ASGI支持,为异步视图提供更好的测试工具。
  • 更新了security.txt模板,帮助网站所有者定义安全报告的接收方式。

5、Django 3.0(2019年12月发布)

  • 引入了支持ASGI(异步服务器网关接口)的Django Channels,使Django能够处理异步请求。
  • 移除了对Python 3.5的支持,仅支持Python 3.6及以上版本。
  • 改进了Model和QuerySet,增加了更多数据库相关功能。

6、Django 3.1(2020年8月发布)

  • 加强了django.db.models.JSONField,支持更多数据库后端。
  • 引入了StrictDateTime,在模型中使用DateTimeField时提供更加严格的日期时间处理。
  • 更新了EmailValidator,支持国际化域名(IDN)。

7、Django 3.2(2021年4月发布)

  • 提供了对PostgreSQL 13的支持。
  • 引入了django.views.View的新特性,支持基于类的视图的更多定制选项。
  • 改进了Model,支持更多数据库相关特性。

8、Django 4.0(2022年12月发布)

  • 加强对Python 3.9及以上版本的支持。
  • 引入更多先进的功能,以适应Web开发的最新趋势和需求。

9、Django 5.0(2023年12月发布)

  • Django 5.0 支持 Python 3.10、3.11 和 3.12。开发团队建议用户使用每个 Python 分支的最新版本。
  • Django 5.0 引入了字段组 (field group) 和字段组模板 (field group templates) 的概念。该特性简化了 Django 表单字段相关元素的渲染,例如标签、小部件、帮助文本和错误等。
  • 新的 Field.db_default 参数用于设置数据库计算 (database-computed) 的默认值。
  • 新的 GeneratedField 支持创建数据库生成的列。该字段可在所有支持的数据库后端上使用,以创建始终根据其他字段计算的字段。

(三)Django与Python的对应关系

Django版本Python版本
Django 1.8Python 2.7, 3.2, 3.3, 3.4, 3.5
Django 1.9, 1.10Python 2.7, 3.4, 3.5
Django 1.11Python 2.7, 3.4, 3.5, 3.6
Django 2.0Python 3.4, 3.5, 3.6, 3.7
Django 2.1, 2.2Python 3.5, 3.6, 3.7
Django 3.0, 3.1Python 3.6, 3.7, 3.8
Django 4.0, 4.1, 4.2Python 3.8, 3.9, 3.10
Django 5.0Python 3.10, 3.11, 3.12

(四)Django的特点

  • Django以其卓越的特点而闻名于业界,让我们一起深入了解这些特性。

  • 首先,Django采用了强大的对象关系映射(ORM)机制,通过映射类构建数据模型,实现了业务对象与数据库的精准映射。这使得开发者可以更专注于业务逻辑,而无需过多关心数据库底层细节。

  • 在URL设计方面,Django展现了其灵活性和强大性。它支持设计任意URL,并可运用正则表达式实现更加复杂的URL匹配,为开发者提供了极大的设计自由度。

  • Django的模板系统同样令人惊叹。它提供了一套可扩展的模板语言,支持模板之间的继承,使得页面设计变得高效而灵活。开发者可以轻松创建出美观而富有交互性的页面。

  • 在表单处理方面,Django引入了便捷的表单模型生成机制,同时内置了有效性检验功能,使得表单处理变得更为简单而安全。

  • Django还以其完善的Cache系统脱颖而出,支持多种缓存方式,为应对高流量和大规模应用提供了强有力的支持。

  • Auth认证系统是Django的又一瑰宝,它不仅提供了全面的用户认证和权限设置功能,而且具有高度可扩展性,满足了各种复杂业务场景的需求。

  • 国际化是当今Web应用不可或缺的一部分,而Django的内置国际化系统使得开发多语言网站变得轻而易举。这为开发者打开了全球用户的大门,让应用更具国际竞争力。

  • 最后,Django还引以为豪的是其强大的Admin后台系统。内置的管理系统不仅易于使用,而且具有强大的扩展性,让开发者可以轻松管理和监控应用。

  • 总的来说,Django凭借其ORM、灵活的URL设计、强大的模板系统、方便的表单处理、完善的Cache系统、全面的Auth认证系统、国际化支持和强大的Admin后台系统等特点,成为众多开发者心中的首选。

(五)MVC模式

1、MVC概念

  • MVC(Model-View-Controller)是一种软件架构模式,将软件系统分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。其优势在于低耦合、开发迅速、部署便捷、可重用性高、维护成本低。模型负责业务逻辑和数据处理,视图展示用户界面,控制器协调模型和视图之间的交互。简而言之,MVC模式提供了一种有序且可维护的软件设计方案。

2、MVC示意图

  • MVC简易图
    在这里插入图片描述
  • 用户操作流程图
    在这里插入图片描述

3、MVC优势

  • MVC(Model-View-Controller)模式的优势显而易见。首先,其低耦合性使得各组件相互独立,修改其中一个不会影响其他部分,提高了系统的灵活性。其次,MVC架构能够加速开发过程,通过明确的分工,开发人员能够并行工作,提高了开发效率。部署方便,模块化的设计使得系统部署更为简便。可重用性高和维护成本低是由于模块化结构的设计,使得代码可维护性强,容易重用,降低了系统维护的难度。MVC的优势在于提供了一种清晰、高效、可维护的软件设计范式。

(六)MVT模型

1、MTV定义

  • MTV(Model-Template-View)模式是Django框架的软件设计范式。模型(Model)负责数据处理,视图(View)处理业务逻辑和调用模型、模板(Template)负责页面渲染。MTV模式在实现各组件间松耦合的同时,保持了清晰的分工,使得开发者能够更专注于业务逻辑和用户界面。通过URL分发器协调各组件工作,实现了灵活、可维护的Web应用开发,使得开发过程更为高效。

2、MTV示意图

在这里插入图片描述

3、MTV优势

  • MTV(Model-Template-View)模式是Django框架的软件设计典范,具有显著的优势。该模式通过模型(Model)、模板(Template)、视图(View)的清晰分工,实现了业务逻辑与数据模型的高度解耦。这种松耦合性使得开发更为灵活、可维护,并提高了代码的可重用性。MTV模式同时充分发挥了Django框架在处理URL分发和页面渲染方面的优势,使得Web应用的开发更加高效,为开发者提供了强大的工具和结构。

(七)Web开发前端和后端

1、Web前端开发

  • Web前端开发是构建用户在浏览器中交互的一部分,涉及HTML、CSS和JavaScript等技术。HTML定义页面结构,CSS负责样式美化,JavaScript实现页面动态交互。前端开发关注用户体验,确保网站在各种设备上都具有良好的可访问性。现代前端开发涉及众多框架和工具,如React、Vue和Webpack等,提高开发效率。前端工程师需关注不断变化的技术趋势,同时与后端开发协同工作,共同构建功能强大、用户友好的Web应用。

2、Web后端开发

  • Web后端开发是构建网站、应用程序背后逻辑和数据处理的关键部分。后端负责处理用户请求,与数据库交互,执行业务逻辑,并生成动态内容供前端展示。常见后端开发语言包括Python、Java、Node.js等,框架如Django、Flask、Spring等提供了便捷工具。合理的后端设计确保系统稳定、安全,并支持前后端协同工作。通过API,后端与前端实现数据交互,共同构建出功能强大、响应迅速的Web应用。

四、课堂小结

  • 在本节课中,我们深入探讨了Django框架的基本概念、版本演化、特点以及与Python版本的对应关系。学生们不仅了解了Django的核心组件MVT模型,还学习了MVC模式的优势。通过版本对比和演化历程,我们更好地理解了Django的发展轨迹。此外,课程还简要介绍了Web前端和后端开发,强调了它们在构建功能强大、用户友好的Web应用中的协同作用。在接下来的实际操作和项目实践中,学生将有机会深入应用所学知识,提升Django开发技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/228133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP UI5 walkthrough step2 Bootstrap

我的理解&#xff0c;这就是一个引导指令 1.我们右键打开命令行--执行 ui5 use OpenUI5 2.执行命令&#xff1a;ui5 add sap.ui.core sap.m themelib_sap_horizon 执行完之后&#xff0c;会更新 yaml 文件 3.修改index.html <!DOCTYPE html> <html> <head&…

Java安全之Commons Collections6分析

CC6分析 import org.apache.commons.collections.*; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; impo…

[⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记

前言 DPD 数字预失真技术&#xff0c;是一种用于抑制功率放大器非线性失真的方法。 它通过在信号输入功率放大器&#xff08;PA&#xff09;之前插入一个预失真模块&#xff0c;对输入信号进行适当的调制&#xff0c;以抵消功率放大器引起的非线性失真&#xff0c;使功率放大器…

线上盲盒扭蛋机,开启潮玩新玩法

盲盒近几年非常火爆&#xff0c;因其不确定性、随机性吸引着盲盒爱好者&#xff0c;引起了潮玩文化风潮。扭蛋机是盲盒的一种新抽取模式&#xff0c;线上扭蛋机小程序在具有盲盒的优势外&#xff0c;还具有较大吸引力&#xff0c;用户参与率较高&#xff0c;这也使得扭蛋机成为…

C++_命名空间(namespace)

目录 1、namespace的重要性 2、 namespace的定义及作用 2.1 作用域限定符 3、命名空间域与全局域的关系 4、命名空间的嵌套 5、展开命名空间的方法 5.1 特定展开 5.1 部分展开 5.2 全部展开 结语&#xff1a; 前言&#xff1a; C作为c语言的“升级版”&#xff0c;其在…

西南科技大学C++程序设计实验十一(泛型程序设计与C++标准模板库)

一、实验目的 1. 掌握泛型程序设计概念; 2. 掌握vector、deque、list容器使用方法; 3.了解set、map容器使用方法。 二、实验任务 1.分析完善以下程序,理解vector容器使用方法: #include <iostream> __#include <vector>_______ //补充vector模板头文件 …

(C语言实现)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我们分享用C语言实现高精度除法&#xff0c;可通过该题测试点我点我&#xff0c;洛谷 p2005。 那么话不多说我们开始吧。 讲解 大家还记不记得小学的时候我们是怎么做除法的&#xff1f;我们以1115为例。 我们的高精度除法也将采用这个思路进行&#xff0c;分别用两…

selenium 解决 id定位、class定位中,属性值带空格的解决办法

一、前置说明 selenium遇到下面这种元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、虽然id一般不会有空格&#xff0c;但是前端错误的这种写法(如下图)&#xff0c;会造成使用id定位不到元素&#xff0c;如&#xff1a; find…

Windows本地如何添加域名映射?(修改hosts文件)

1. DNS(域名系统) Domain Name System(域名系统)&#xff1a;为了加快定位IP地址的速度, 将域名映射进行层层缓存的系统. 目的&#xff1a;互联网通过IP&#xff08;10.223.146.45&#xff09;定位浏览器建立连接&#xff0c;但是我们不易区别IP&#xff0c;为了方便用户辨识I…

SAP 后继物料简介

后继物料(Discontinued Part)是SAP系统提供的一项用于物料继承与物料永久性替换的功能。在企业的日常生产业务中,经常会出于技术原因或成本原因进行大批量的物料替换或物料升级。比如说,企业可以用一种可靠性更高的组件替换先前使用的组件,或者出于节省成本的目的,使用一…

Google Gemini Pro 测试

谷歌新发布了Gemini模型&#xff0c;说是吊打GPT4&#xff0c;上手使用了下&#xff0c;感觉一般&#xff0c;没有感觉到预期的吊打。下面是与Bard的对话。

条码生成器与Zint使用

文章目录 目的条形码zint支持条形码种类下载编译qt pro配置code保存条形码目的 1: 了解条形码数据理论知识 2: 了解zint第三方库相关, 如何编译引用到项目中 条形码 条形码(Barcode)一维码 和二维码(QR code)都是用于存储信息的图形化表示方式,通常应用于商品标识、库…

led护眼灯真的能护眼吗?热门口碑好的护眼台灯推荐

2023年我国青少年近视率为53.6%&#xff0c;其中6岁以下儿童近视率为14.5%&#xff0c;小学生近视率为36%&#xff0c;初中生近视率为71.6%&#xff0c;高中生近视率为81%&#xff0c;大学生近视率为90%。 也就是孩子上了大学&#xff0c;十个里面有九个是近视&#xff0c;不戴…

【C语言】vfprintf函数

vfprintf 是 C 语言中的一个函数&#xff0c;它是 fprintf 函数的变体&#xff0c;用于格式化输出到文件中。vfprintf 函数接受一个格式化字符串和一个指向可变参数列表的指针&#xff0c;这个列表通常是通过 va_list 类型来传递的。vfprintf 函数的主要用途是在需要处理不定数…

【文件上传系列】No.1 大文件分片、进度图展示(原生前端 + Node 后端 Koa)

分片&#xff08;500MB&#xff09;进度效果展示 效果展示&#xff0c;一个分片是 500MB 的 分片&#xff08;10MB&#xff09;进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页…

机器学习实验二:决策树模型

系列文章目录 机器学习实验一&#xff1a;线性回归机器学习实验二&#xff1a;决策树模型机器学习实验三&#xff1a;支持向量机模型机器学习实验四&#xff1a;贝叶斯分类器机器学习实验五&#xff1a;集成学习机器学习实验六&#xff1a;聚类 文章目录 系列文章目录一、实验…

公众号提高数量

一般可以申请多少个公众号&#xff1f;目前公众号申请数量的规定是从2018年底开始实施的&#xff0c;至今没有变化。规定如下&#xff1a;1、个人可以申请1个个人主体的公众号&#xff1b;2、企业&#xff08;有限公司&#xff09;可以申请2个公众号&#xff1b;3、个体户可以申…

数组指针与函数指针

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

jetbrains卡顿(Pycharm等全家桶)终极解决方案,肯定解决!非常肯定!

话越短&#xff0c;越有用&#xff0c;一共四种方案&#xff0c;肯定能解决&#xff01;&#xff01;&#xff01;非常肯定&#xff01;&#xff01; 下面四种解决方案&#xff0c;笔者按照实际体验后的结果&#xff0c;按照优先级从高到低排序。你只要按顺序试试就知道了。 m…

labelme等标注工具/数据增强工具输出JSON文件格式检查脚本

标注的文件太多了&#xff0c;还有用数据增强工具生成了一票的新数据。在转换或使用训练时候会报错&#xff0c;错误原因是json中语法有问题&#xff0c;这样会中断程序运行&#xff0c;调试造成很大困扰。 检查确实最后有问题&#xff0c;多写了一次 写一个脚本&#xff0c;用…