Django进阶

Posted sutcoderhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django进阶相关的知识,希望对你有一定的参考价值。

一、models(模块)的知识展开

  1. ORM(管理器)的概念,ORM指的是对象-关系-映射的简称,是把数据库表映射成为一个类,类属性表示字段,这样做的好处是对于开发者而言更加
    的可操作化,在对数据库进行增删改查可直接对对象进行操作而不用考虑具体SQl语句。而内部实现交互是管理器自动完成的,在定义类的时候一定要继承models模块中的Model类,使该类为模型类。目前models支持sqlite、mysql、oracle三种主流数据库。但这样做也有一定
    的缺点那就是内部转化的过程中可能会花费一些时间,使得效率不是那么高。
  2. 使用Models之前第一步先去到配置文件中更改database为要使用的数据库,同时把目前的应用加入配置文件中installed_app项。当定义完字段类型及属性之后makemigrations生成迁移文件,是内部转换sql语句,最后在migrate执行迁移文件,将数据导入。
  3. 多张表的关系类型分为
    一对多:ForeignKey—— 将字段定义在多的一端
    多对多:ManyToManyField —-将字段定义在两端
    一对一:OneToOneField—— 将字段定义任意一段
  4. 具体处理一对多的关系(以英雄图书为例)由于将字段定义在了多的一端,所以当使用多的一端查询时可以直接使用hero.book_id 多少一端由于没有字段,所以应使用 book.heroinfo_set 获取该图书中的所有英雄
  5. 在定义字段时tittle= models.CharField()括号里面写的是字段选项,如max_length=20就是最大长度为20以及如default设置默认值,null等多种字段选项,用来装饰限制该字段
  6. 元选项Meta类,该类是定义在模型类里面的,在python中称为元类。而该类在此处的作用是设置元信息, 如可以更改表的名字db_table=‘book’以及排序等等,表名默认为 应用名_模型类
  7. 在一个项目中创建多个应用的好处是增加代码的重用性
  8. 再去增删改一个表时,可以利用该表生成一个对象,利用对象对该表中的信息进行操作,最后调用save()方法进行保存
  9. 模型中的管理器
  • 管理器是模型类中的一个属性,用来对模型类和数据表之间进行映射,默认使用的是object管理器。
  • 而这种管理器也可以被我们自己定义,通过自己定义一个类,然后继承models模块里的Manager,通过重写或新定义里面的方法也能实现管理器功能。
  • 而在Django我们也可以使用多个管理器,在使用时直接用模型类引用管理中方法即可,用到哪个管理器引用哪个。
  • 重新定义管理器有两个好处
    第一,可以对查询之后的结果进行筛选使其返回不同的结果集
    第二,可以更方便的创建模型对象,这种方法可以用来取代在模型类本身中定义create类方法(因为模型类中不能定义__init__对象方法)。在管理器
    中定义creat方法,之后用到的话直接通过对象调用即可。
  1. 有关查询
    • 再使用模型类的过程中,一定会涉及到查询表中的数据并传到前台进行显示。而其实现途径和写SQL查询语句本质上没有什么区别的。
      都是返回一个查询集,而返回查询集之前我们仍然可以对其进行筛选、聚合等一系列SQL操作。
    • 返回查询集的方法称为过滤器,具体有all()、filter()、exclude()、order_by()、values()等多种方法
      其中最长用的是all(通通返回)、filter()对返回之前进行过滤
    • 使用filter过程中会用到比较、包含等多种运算关系,具体都是在filter(这里写),其中实现两个不同字段的比较要引入F对象
    • 管理器也可以直接使用聚合aggregate(Max等方法)进行直接查询返回结果
    • filter()中的条件与关系用filter(条件1).filter(条件2)来实现,或者filter(条件1,条件2)
      而或的关系要引入Q对象,通过Q(条件1)|Q(条件2)来实现











以上是关于Django进阶的主要内容,如果未能解决你的问题,请参考以下文章

Django进阶

Django入门进阶与项目实战

Django 进阶篇

Django进阶篇

Django进阶

1.2Django 视图与网址__进阶