【Django之Django REST Framework框架安装】
一、简介
- 它是在Django基础之上,进行了二次开发
- 主要用于构建Restful API
- 简称为DRF框架或者REST Framework框架
二、特性
- 提供了强大的Serializer序列化器,可以高效地进行序列化与反序列化操作
- 提供了极为丰富的类视图、Mixin扩展类、Viewset视图集
- 提供了直观的Web API界面
- 多种身份认证和权限认证
- 强大的排序、过滤、分页、搜索、限流等功能
- 可扩展性强,插件丰富
三、安装&配置
1.安装
直接使用pip安装即可
2.配置
settings.py中将rest_framework字段添加到INSTALLED_APPS列表中即可
====================================================================================================================================================================================================================================================================================================================================
接下来讲解:
【Django之ORM框架】
一、定义
对象关系映射(Object Relational Mapping,简称ORM)模式的作用是在关系型数据库与业务实体对象之间进行映射
通过类和对象就能操作它所对应数据表中的数据(CRUD)
二、数据迁移
1.配置数据库连接信息
创建数据库
配置数据库:需要在全局settings.py中的DATABASES字段中配置数据库信息
安装mysqlclient
需要满足的依赖
2.在models.py中定义模型类
2.1、可以在子应用projects/models.py文件中定义数据模型
2.2、一个数据模型类对应一个数据表
2.3、数据模型类,需要继承Model父类或者Model子类
2.4、在数据模型中,添加的类属性(Field对象)来对应数据表中的字段
3.迁移
terminal执行以上两条命令,则在数据库生成对应的表
上面生成迁移脚本和创建数据库表的命令行都是针对所有的,如果只想创建某一个子应用的表呢?只需要在上面的命令行后面跟上子应用名即可
4、表的创建
在第二步的迁移步骤中,已经实现了如何通过数据模型创建数据库表,我们知道数据库表字段有各种属性,如长度、字符类型、约束条件、默认值等等,在Django的数据模型中,我们并不需要去编写sql语句来创建数据库表,而是可以通过类和对象的方式进行数据库的增删改查等操作,这样就方便了许多。
AutoField类、CharField类、IntegerField类、TextField类、DecimalField类、DateTimeField类、DateField类、TimeField类等等,它们都继承了Field父类,我们通过查看Field源码的构造方法,可以看到很多关于字段的属性设置
- verbose_name:个性化信息
- primary_key:主键约束,如果某一个字段中设置了primary_key=True,那么Django就不会自动创建id字段
- max_length:至少要指定一个该字段,它代表此字段的最大长度,不能为负数,最大长度不能超过200
- unique:唯一键约束
- blank:指定前端用户在创建数据时,是否需要传递,默认需要传递,如果不传递,设置为True
- null:指定数据在保存时是否可以为空,默认不能为空,为空设置为True
- default:指定默认值,往往会跟black一起使用-
- help_text:帮助文本信息,在api接口文档平台和admin后端站点中会用于提示,往往跟verbose_name一致
而DateTimeField类、TimeField类也继承了DateField类,DateField类中的构造方法也有新的参数
- auto_now:设置成True后,Django会自动添加更新记录时的时间
- auto_now_add:设置成True后,Django会自动添加创建记录时的时间
5.修改表名
按照上面的操作生成的数据库表的表名默认为:子应用名称_模型类名小写,如果想自定义表名,只需要在数据模型类下面定义一个Meta的子类
三、CRUD
在CRUD操作之前,为了更好的debug,我们可以引入connection模块,它可以在我们进行CRUD操作时,会显示出对应的sql语句,通过sql语句,可以及时发现错误,也可以看到sql语句的性能是否达到最优
在视图模块中引入connection模块
调试器上添加“connetion.queries”:
1.c(create)
向数据表添加一条记录,两种方法
- 1、使用模型类对象来创建:
- 2、可以使用查询集的create方法,使用模型类.objects.create()方法,无需调用save方法
2.u(update)
- 1、先获取模型类对象,然后修改某些字段,再调用save方法保存
- 2、用模型类名.objects.filter(字段名=值).update(字段名=修改的值)
3.r(retrieve)
1. 获取所用记录--all()方法:qs = Projects.objects.all()
- 返回QuerySet查询集对象(实际上是多个模型类类对象的列表)
- 支持数字索引取值(负索引不支持,返回模型类对象,一条记录)、切片(返回QuerySet查询集对象)
- for循环迭代,每次迭代取出一个模型类对象
- QuerySet查询集对象.first()获取第一个记录、.last()方法获取最后一条记录
- .count()方法,获取查询集中数据记录条数
- 惰性查询,只有你真正去使用数据时,才会去数据库中执行sql语句,为了性能
- 链式调用
2. 获取指定记录
- get:
- (1)一般只能使用主键或者唯一键作为查询条件;
- (2)如果查询的记录为空或者多条记录,会抛出异常;
- (3)返回的模型类对象,会自动提交
- filter:通过过滤的方式查询,每个字段都提供了很丰富的选项进行查询操作
Projects.objects.filter()
- a.filter支持多个过滤表达式,字段名__过滤表达式,返回的是查询集
- b.字段名__startswith、字段名__istartswith:过滤以xxx开头的字符串
- c.字段名__endswith、字段名__iendswith:过滤以xxx结尾的字符串
- d.字段名__gt:大于,__gte: >=, __le: <, __lte:<=
- e.字段名=条件与字段名__exact等价,在Django ORM中有一个内置的变量pk,为数据库模型类的主键别名
- f.__contains、__icontains、__in、__isnull
- g.如果没有指定的记录,会返回空查询集
- exclude:与filter相反,为反向过滤
3.关联查询
- 通过从表的信息获取父表的记录,从表模型类名小写 _从表字段名_ 查询表达式
- 惰性:查询集对象,只有去使用的时候,才会执行sql语句
- qs = Projects.objects.filter(interfaces__name__regex='^[0-9]')
4.逻辑关系查询
- 查询集支持链式调用,可以使用filter方法去过滤
- 同一行中的多个filter是“与”的关系
- 查询“或”的关系
- .filter(Q(查询条件1) | Q(查询条件2))
5.聚合查询
首先导入聚合函数
- 用法
6.排序
- a.使用order_by来进行排序
- b.可以使用字段名作为排序条件,默认为升序,
- c.使用“-”字段名,为降序
- d.可以同时指定多个排序条件
4.d(delete)
- 1.使用模型对象.delete()
- 2.使用查询集.delete()