奠定项目基石:Model

环境

虚拟环境+python3.5.2 + Django1.11
安装虚拟环境的原因是,在实际的项目开发过程中,我们可能需要维护多个项目,甚至同时开发不同的项目,而这些项目的依赖又不同,如果不同的依赖都安装在系统环境中,可能会出现意想不到的冲突,所以我们创建了可以独立于系统的Python运行环境和包管理环境,在实际的开发过程中,我们针对不同的项目分别创建独立的虚拟环境。

Model

Django是基于MVC(Model-View-Controller)模式的框架,其中的M就是Model层。


Model在整个项目中是直接和数据库打交道的一层,所以数据处理的部分都放在这一层操作,而且这一层也是整个项目的基石,因为如果数据层出现问题,后面的开发则很难进行下去,或者说没有意义,所以这一层很重要。
这一层有几个比较重要的模块:
Models:模型定义相关的使用说明,需要配置的是字段类型,meta配置等;
QuerySets:在Model的基础上怎么查看数据,有哪些接口可以用,以及如何更进一步进行定制;
Model instances:Model的实例,一个实例可以理解为表中的一条记录;
Migrations:在开发阶段,我们会不断的调整表的结构,这部分就是用来做表结构的调整的。
Advanced:这里涉及如何定义Manager(也就是常用的Model.objects.all中的objects),以及如果不爽ORM的查询限制,但是又想用ORM对象的映射,可以考虑使用原生的SQL。
Other:这一部分有两块,一个是Legacy databases(遗留数据库),想象下,有人甩给你一个已有的CMS项目,要改成Django的,你拿到表,直接根据生成Model。之后你再花几分钟写写admin部分代码,CMS出来了,爽不爽。另外一部分就是Optimize database access。

数据关系模型


这个模型是拿到一个项目之后要先进行需求分析,然后从需求中整理而来。而对于内容或者说数据驱动的项目来说,设计好模型是成功的一半,因为后续的所有操作都是基于Model的。

ORM

ORM(Object Relational Mapping):对象关系映射,大白话解释就是把我们定义的对象(类)映射到对应的数据库表上,所以ORM其实就是代码层面对于数据库表和关系的一种抽象。
简单来说,就是继承了Django的Model,然后定义了对应的字段,Django 会帮我们把Model对应到数据库的表上,Model中定义的属性就对应表的一个字段,而对于有关联关系的Model,比如用到了ForeignKey的Model,就是通过外键关联的表。其中类中的属性对应数据表的字段,属性的类型对应MySQL字段的类型,属性定义时传递的参数定义了字段的其他属性,比如长度,是否允许为空等。
所以,Model中字段的类型跟MySQL中字段的类型相对应是ORM中基本的规则,我们只需要写python的代码,数据库会根据ORM规则自动生成SQL语言,避免了复杂的SQL语句的书写。

QuerySet的使用

在Model中,QuerySet是一个很重要的概念。因为我们同数据库的所有查询以及更新交互都是通过它来完成的。
在Model层中,Django通过给Model增加一个objects属性来提供数据操作的借口,当我们用到它时,他会去DB中获取数据。为什么是当我们用到它时

# 第一句是不会取数据库中提取数据的,他只会生成一个object对象
posts = Post.objects.all()
# 当真正用到它的时候,才会去数据库中拿数据
available_posts = posts.filter(status=1)

其原因是QuerySet支持链式操作,如果每次执行都要查询数据库的话,会存在性能问题。
同时,QuerySet还提供了很多供我们使用的接口,用来查询数据,如all,filter等。
也就是说,Django 的ORM为了达到跟SQL语句同样的表达能力,给我们提供了各种各样的接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章