Django是基于MVC模式的框架,虽然也被称为“MTV”的模式,但是大同小异。对我们来说,需要了解的是无论是MVC模式还是MTV模式,甚至是其他的什么模式,都是为了解耦。把一个软件系统划分为一层一层的结构,让每一层的逻辑更加纯粹,便于开发人员维护。

从大的划分上来说,Django的文档先是分出了这么几个模块:The model layer, The view layer, The template layer, Forms, 剩下的部分都是功能文档,比如Pagination,Caching等,可以贯穿所有层。
Model部分
Model在整个项目结构中是直接同数据库打交道的层,所以数据处理的部分都在这一层。在业务开发中,关于纯数据操作的部分,建议都放到这一层来做。
Models - 模型定义相关的使用说明,字段类型,Meta配置
QuerySets - 在Model的基础上,你要怎么通过Model来查数据,有哪些接口可以用,比如all(), filter()等,以及更进一步的定制,毕竟ORM在查询上会有一些限制,但是在这一部分你可以找到如何自定义查询。
Model instances - Model的实例,一个实例你可以理解为表中的一条记录,这个实例有哪些操作,如何修改表的数据,都在这了。
Migrations - 主要是在开发阶段,我们可能会不断的调整表的结构,这个就是用来做表结构调整的。理论上我们只需要知道两个命令:makemigrations和migrate就行了,但是如果你想做更多的了解,可以仔细看下这部分。
Advanced - 高级部分(别被高级这两字吓到),如何自定义Manager(也就是常用的Model.objects.all()中的objects),以及如果不爽ORM的查询限制,但是又想用到ORM对象的映射,你可以考虑的RAW_SQL。另外关于事务、聚合、搜索,以及多数据库支持等更多的关于Model层的需求都可以看着。
Other - 这一部分有两块,建议一定要看看,一个是Legacy databases(遗留数据库),想象下,有人甩给你一个已有的CMS项目,要改成Django的,你拿到表,直接根据生成Model。之后你再花几分钟写写admin部分代码,CMS出来了。另外一部分就是Optimize database access。
View部分
在View中,我们通过操作Model拿到数据,做一些业务上调整,然后把数据传递到模板中,最终渲染出来页面。
在Django的文档中,View部分包含了URL配置、http request、http response以及处理请求的View函数和类级的View等部分。下面一一列举。
The basics - URL配置,view方法,以及常用装饰器,比如想给这个接口增加缓存、或者要增加限制(只允许GET请求)等。
Reference - 一些参考,内置的view(比如静态文件处理,404页面处理等),Request和Response对象介绍,TemplateResponse对象介绍。
File uploads - 文件上传是Web开发中常遇到的问题,Django中可以通过这一节来看如何处理文件上传,它提供了一些内置的模块来帮你处理上传上来的文件,不过它也会告诉你如何来自定义后端存储。
Class-based views - 这部分可以理解为更复杂的View函数,只不过这儿是类。通过类可以提供更好的复用,从而避免自己要写很多代码。当你发现你的View中有太多的业务代码时,你可以考虑参考这一节把代码改造为ClassBase View(简称:CBV),如果你的代码中有很多类似的View函数,可以考虑这么做。这部分的文档就是告诉你Django中,如何来更好的构建你的View,以及复用你的View。
Advanced - 更高级的部分,就是告诉你如何把数据导出为CSV或者PDF
Middleware - 中间件(中间层),这一部分代码作用于WSGI(或者Socket连接)和View之间,对View函数做了一个包装,但是稍微复杂了一些。Django中安全的部分,Session的部分,整站缓存的部分,都在这一块了。
Template部分
这是Django声称对设计师友好的部分,因为它提供的语法很简单,任何人都可以很快上手,即便是不同编程的人,也可以很容易学习和使用。
The basics - 这部分介绍了Django模板的基本配置,以及基本的模板语法,还有看起来可配置的如何替换为jinja2模板引擎的说明。
For designers - 说是给设计师看的,但是你也应该看一看,基础的控制语句、注释,还有内置的filter和tag,还有最重要的针对用户友好的数字的展示。
For programmers - 这个程序员更应该看看了,如何传递数据到模板中,如何配置模板,以至于能够在view中更好的渲染模板,还有就是如何对现有模板所提供的简单的功能最更多的定制。
Forms部分
对于传统的,需要通过form来提交数据的页面,Form还是挺好用的。就像是ORM(关于ORM是什么不清楚的可以看:什么是ORM?)一样。Form是对html中Form表单的抽象。
The basics - 基础的API的介绍,里面有类似于Model的Field的部分,还有组件(Widgets)的部分。
Advanced - 更丰富的使用,如何把Form同Model结合(Model也有Field,Form也有Field,用一个不行?),以及如何把媒体资源渲染到页面上呢,还有如何布局你的字段,一行展示一个还是一行展示多个,还有更加细节、深入的部分就是如何定义字段级别的验证功能。比如页面上只允许输入数字的地方如何验证。
这部分在开发admin时很常用,因为admin跟Model结合紧密,我们如果需要去改模板的话成本会有点高,所以更好的做法是通过自定义Form以及自定义Widget来实现我们需要的功能。在前台(针对用户的界面)以为我们直接写的模板,所以更加灵活,并且我们也很少使用form表单来提交数据,所以用的较少。

吴裕雄--天生自然PythonDjangoWeb企业开发:Django文档阅读简介的更多相关文章

  1. 吴裕雄--天生自然PythonDjangoWeb企业开发:需求

    开发或者做一个项目,是要有一个需求过来的,而不是无缘无故的,启动一个项目,或者推动整个项目进行下一步迭代.这个需求可能是根据用户反馈增加的,可能是老板提出来的,也有可能是产品经理提出来的,但是无论是什 ...

  2. 吴裕雄--天生自然PythonDjangoWeb企业开发:学员管理系统- 前台

    开发首页 做一个简单的用户提交申请的表单页面. 首先在student/views.py文件中编写下面的代码: # -*- coding: utf-8 -*- from __future__ impor ...

  3. 吴裕雄--天生自然PythonDjangoWeb企业开发:学员管理系统后台

    需求 提供一个学员管理系统,一个前台页面,展示现有学员,并供新学员提交申请,一个后台,能够处理申请. pip install django==1.11.2 创建项目 使用控制台进入到一个目录下,具体是 ...

  4. 吴裕雄--天生自然PythonDjangoWeb企业开发:解决Pythonno module named "XX"问题

    在项目中加入 sys.path.append('你的django项目路径') sys.path.append('python的site-packages路径')

  5. 吴裕雄--天生自然PythonDjangoWeb企业开发:解决使用相对路径名导入包中子模块问题

    问题 将代码组织成包,想用import语句从另一个包名没有硬编码过的包中导入子模块. 解决方案

  6. 吴裕雄--天生自然PythonDjangoWeb企业开发:解决ModuleNotFoundError: No module named 'config'报错

    使用创建完模块应用之后python manage.py startapp test_app,您应该进入settings.py并将其注册到

  7. 吴裕雄--天生自然PythonDjangoWeb企业开发:框架基础和技术选型

    简单的Web Server import socket eol1 = b'\n\n' eol2 = b'\n\r\n' body = '''Hello,world!<h1>tszrwyx& ...

  8. 吴裕雄--天生自然 R语言开发学习:R语言的安装与配置

    下载R语言和开发工具RStudio安装包 先安装R

  9. 吴裕雄--天生自然 R语言开发学习:数据集和数据结构

    数据集的概念 数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量.表2-1提供了一个假想的病例数据集. 不同的行业对于数据集的行和列叫法不同.统计学家称它们为观测(observation)和 ...

随机推荐

  1. MySQL数据完整性

    数据完整性 一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型.约束 ...

  2. 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数

    程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...

  3. 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型

    Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...

  4. springboot+mybatis报错Invalid bound statement (not found)

    今天做项目时报了一个错提示说Invalid bound statement (not found),也就是说mapper接口绑定.xml文件出错了,找不到指定的sql:原因是程序没有把.xml文件编译 ...

  5. awk函数实现将点分式形式的掩码转换为十进制形式的掩码

    在用awk处理文本时,需要将源数据为点分式形式的掩码转换为十进制形式的掩码,下边的函数可简单实现: 转换功能函数cdr2mask function cdr2mask(mask_point) { num ...

  6. Python整合pdf【新手必学】

    在下载课件时往往会分成很多个小的pdf,一个也就几页,想要整合成一整个大pdf,于是百度了一下,网上有很多在线的pdf整合器,但是由于这蛋疼的网速,流量还要花钱,还是想要本地搞. 说python是万能 ...

  7. Bugku-CTF加密篇之zip伪加密(flag.zip)

    zip伪加密

  8. springboot @Configuration @bean注解作用

    @Configuration注解可以达到在Spring中使用xml配置文件的作用 @Bean就等同于xml配置文件中的<bean> 在spring项目中我们集成第三方的框架如shiro会在 ...

  9. layui 延时加载

    //延时关闭当前页面,并刷新父页面layer.msg('提交成功',{time: 1800},function () { parent.layer.close(index); window.paren ...

  10. nginx+keepalived+tomcat实现主从高可用负载均衡

    设备: 1.准备四台虚拟机,两台tomcat,两台nginx 2.两台tomcat配置相同,测试页不同 两台Tomcat配置完全相同.只有测试页面不同 安装jdk和tomcat [root@local ...