美文网首页
django设计哲学

django设计哲学

作者: 转身丶即天涯 | 来源:发表于2019-03-23 10:36 被阅读0次

原文地址: Django 1.11.18.dev20181205205104 documentation


设计哲学

这个文档阐释了一些django开发者使用在django中的基本哲学。它的目标是解释过去和指导未来。

松耦合

django技术栈的一个基本目标就是”松耦合、高内聚“。框架的各个层在不必要的情况下,不必知道其他各层。
例如,template层不知道web requests,数据库层不知道数据展示层,视图层不在意用户使用哪个template。
虽然django带来了全栈解决方案的便捷,栈的各个层都尽量独立于其他的层。

更少的代码

django的应用应该使用尽可能少的代码,他们那应该是缺少样板。
Django应该充分使用python的动态能力,比如自省。

快速开发

21世纪框架的特点是让冗长复杂的开发变得快捷。django允许快速进行web开发。

DRY,不要重复造轮子

每个截然不同的概念或者数据应该存放在一个地方,而且只有这个地方。
冗余是不好的,标准化是好的。
作为框架,合理的情形就是从尽可能少的内容推断出尽可能多的内容。

另行参考
discussion of DRY on the Portland Pattern Repository

显示比隐式更好

这是在PEP20中列出的核心python原则,这意味着django不应该做太多”魔法方法“。至少有一些很耗的理由说明”魔法方法“不应该出现。如果”魔法方法“创造了一大堆方便的,并且其他方法难以实现的方法时,这才是”魔法方法“唯一值得使用的地方,并且它不能用一种让尝试学历如何使用这些特性的开发者感到困惑的方式。

一致性

框架应该从所有层面进行考虑。这些考虑包括任何事情,从低级的python代码风格到高级的使用django的经验。

Models

显示比隐式更好

字段不应该假定仅仅由它的名字来确定,这需要太多操作系统的知识并且容易出错。相反,在某些情况下,行为应该基于关键字参数,比如字段的类型。

包含所有的相关域的逻辑

模型应该将一个”对象“的所有属性封装起来,遵循Martin Fowler的Active Record设计模式。
这就是为什么数据用模型来表示,并且它被定义在模型类中(比如人类可读的名字,默认排序这样的选项,等等)。所有的信息需要知道被存储在某一个模型中。

Database API

以下是database API的核心目标:

高效SQL

应该以尽可能少的时间来执行SQL,并且应该在内部优化SQL的声明。
这就是为什么开发者需要显示的调用save(),而不是框架在场景背后默默的进行保存操作。
这也是为什么select_related()方法存在的原因。这是一种非强制执行的,一般情况下选择所有相关对象的助推器。

简洁又强大的语法

数据库API应该允许丰富,在尽可能简短的语句中富有表现力。不应该依赖导入其他模块或者辅助对象。
联结应该在必要的时候,在使用场景背后被自动执行。
系统层面,每个对象可以被关联对象访问。

选择原生SQL更简单,如果我们需要的话

数据库API应该意识到它只是捷径,并非必须。框架应该让自定义SQL更容易--完整的声明,或仅仅通过调用API自定义WHERE从句。

URL 设计

松耦合

django应用中的路由不应该耦合到python代码上。将路由绑定到python函数名是一种不好而且丑陋的做法。
沿着这些做法,django路由系统允许相同的应用在不同的上下文中不同。例如,一个站点把要存储的内容放在 /stories/ 中,又或者存放在 /news/中。

无限的灵活性

路由应该尽可能的灵活,任何能想象到的路由设计都应如此。

鼓励最佳实践

框架应该让它对开发者而言变得简单来设计漂亮的路由。
网页中的文件的扩展名应该被隐藏。

不可更改的路由

从技术上讲,foo.com/bar 和 foo.com/bar/ 是两个不同的路由,并且搜索引擎(和其他web分析工具)会把它们当做两个不同的页面。django努力的标准化路由,目的是让搜索引擎不再困惑。
这就是APPEND_SLASH设置背后的推论。

模板系统

分离逻辑

我们把模板系统看做一个工具,一个控制页面展示和页面展示相关逻辑的工具。
模板系统不应该支持超过它基本目标的功能。

阻止冗余

大多数动态网站使用一些常见的网站设计--通用的header,footer,navigation bar,等等。django模板系统应该让这些元素存储在同一个地方更简单,从而去除重复的代码。
这就是template inheritance背后的设计哲学。

从HTML中解耦

模板系统不应该设计为仅仅展示HTML。它应该在生成基于文字的格式化方面同样优秀,或者仅仅是文字。

XML不应该用于模板语言

在编辑末班时,使用XML引擎来解析模板引入了一个全新的错误--并且引发了一个在模板处理中不可接受的开销。

假定设计者的能力

模板系统不应该被设计,目的是模板必须被很好的展示在所见即所得的编辑器中,比如Dreamweaver。这是严重的

相关文章

  • django设计哲学

    原文地址: Django 1.11.18.dev20181205205104 documentation 设计哲学...

  • Django的设计理念和哲学

    Django作为一个庞大的、自带电池的、整体Web开发解决方案框架,源代码多、子系统多、工具多。要将如此多的内容集...

  • Django相关的一些知识点

    01Django的MTV设计模式 Django其实也是一个MTV的设计模式。MTV是Model、Template、...

  • 02 通过留言版功能回顾django基础知识

    一、django目录介绍 二、配置表单页面 三、django orm介绍与model设计

  • 4.Django路由系统

    Django路由系统 URL调度器Django 允许自由地设计你的URL,不受框架束缚。Django认为,对于高质...

  • Django框架学习

    界面设计 djngo快速实现--使用Bootstrap 给django增加bootstrap前端框架 Django...

  • Django安装及简单使用1.1

    Django安装及简单使用 1.1 Django的简要概述 Django采用了MVC的软件设计模式,即模型M,视图...

  • 【设计哲学】

    设计的哲学哲学的设计 设计应该提升高度哲学不妨加强趣味 当设计遇上逻辑问题将会更易解决当哲学注入创意思想自然更加开...

  • 0day-从实验楼开始

    Django文件结构 设计模型Model - models.py 设计视图Views - views.py 设计链...

  • Django简介

    Django是由Python语言写的开源web开发框架。 Django的框架设计基于MVC(Model-Views...

网友评论

      本文标题:django设计哲学

      本文链接:https://www.haomeiwen.com/subject/gfsrvqtx.html