ad

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.7.3 Django Template 的 Render

网友投稿 141 2023-11-07

【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第2章,第7节,由陈刚、王洪军编著。

2.7.3 Django Template 的 Render 快捷使用

在2.7.2小节,我们知道如何加载模板、填充上下文、返回 HttpResponse 对象

了,这么做的结果是渲染一个模板,是为了让读者了解 Django 加载及在浏览器中渲 染模板的过程。只有一步一步地理解了这个过程,在随后的学习中,才能打好坚实的 基础,做到知其然,知其所以然。

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.7.3 Django Template 的 Render

其实,在 Django 的开发过程中,根据上下文渲染一个网页模板是一个最经常要 实现的操作,因为 Django 框架的开发者们提供了一种更简单的快捷方式,只需一行 代码就能做到。这个简单方式是 django.shortcuts 模块中名为 render() 的函数。

render() 函数中的第一个参数是请求对象;第二个参数是模板名称;第三个参数 可选,是一个字段,用于创建传给模板的上下文。如果不指定第三个参数,则 render() 使用一个空字典。

在本小节,我们就来更改一下上一小节的代码,使用更简单的 render() 函数来 实现。

将 bbs 目录下 view.py 文件中的 password_reset() 函数更改如下:

https://github.com/aguncn/django_demo_project/blob/master/bbs/views.P如果读者再用浏览器访问http://127.0.0.1:8000/password_reset/, 则会发现 网页输出和上一小节一模一样,但代码却精简到了一行。

希望读者以后遇到类似的简单网页模板渲染时,尽可能地使用 render() 函数。

还有一个类似的函数 render_to_response(), 这个函数所有的模板路径为 djan-go.shortcuts.render_to_response 。 自 Django 1.3开始:render() 方法是 render_to.

response() 的一个崭新的快捷方式,前者会自动使用RequestContext, 而后者必须编 码出来,这是最明显的区别,当然前者更简洁。render_to_response() 在2 .0 版后已 移除,所以读者如果在代码里遇到这个函数,应注意在 Django 2.x 版本中进行相应 的替换。2.8 Django 模型 Model

经过前面章节的知识铺垫,我们可以顺理成章地进入 Django 最复杂的模型功能 的学习了。在 Django 总体功能中,Model 模型的位置如图2-11所示。

Model 可以说是 Django 最核心的功能了,你无法想象一个不需要保存数据的 Web 应用,也无法想象一个当服务器断电之后,就丢失了所有数据的网站。而 Mod- el 的功能,就可以将网站重要的数据进行落地持久化保存成数据库里的记录,并且在 需要的时候,随时将数据从数据库的记录中调出来展示给用户。

2.8.1 Model ORM

在 Django 的框架设计中采用了 MTV 模型,即 Model 、Template 、Viewer。 Model 相对于传统的三层或者 MVC 框架来说就相当于数据处理层,它主要负责与 数据的交互。在使用Django 框架设计应用系统时,需要注意的是,Django 默认采用 的是 ORM 框架中的Codefirst 模型(根据代码中的类自动生成数据库的表),也就是 说开发人员只需要专注于代码的编写,而不需要过多地关注数据库层面的东西,这样 可以把开发人员从数据库中解放出来。

那么,什么是ORM 呢? Object Relational Mapping(关系对象映射),其操作本 质上会根据对接的数据库引擎,翻译成对应的 SQL 语句;所有使用Django 开发的项 目无需关心程序底层使用的是 MySQL 、Oracle 还是 Sqlite, 都会以同样的操作实现。

与ORM 作对比的,常常是原生 SQL。 如果 Django 中使用原生 SQL, 会导致 SQL 语句重复率很高,利用率不高。如果业务逻辑生变,原生 SQL 更改起来比较 多,且容易忽略一些 Web 安全问题,如 SQL 注入等。但使用 ORM 做数据库的开发 可以有效地减小重复 SQL 语句的概率,写出来的模型也更加直观、清晰。ORM 转 换成底层数据库操作指令确实会有一些开销。但从实际的情况来看,这种性能损耗 很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率、代码的阅读性, 带来的好处要远远大于性能损耗,而且项目越大,作用越明显。使用 ORM, 可以轻 松地写出复杂的查询。Django 封装了底层的数据库实现,支持多个关系数据库引 擎,包括流行的 MySQL 、PostgreSQL 和 SQLite, 可以非常轻松地切换数据库。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Excel VBA+SQL数据管理与应用模板开发》_3.2.2 利用 DISTINCT 查询不重复记录
下一篇:《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.1 给指定字符串设置上标或下标
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×