Django 知识点补充

1 Django如何在Model保存前做一定的固定操作,比如写一条日志

(1)利用Django的Model的Signal Dispatcher, 通过django.db.models.signals.pre_save()方法,在事件发生前,发射触发信号,

  1. (1) 信号.connect(执行的函数)
  2. import logging
  3. from django.db import models
  4. from django.db.models.signals import pre_save
  5. from django.dispatch import receiver
  6. class User(models.Model):
  7. # ...
  8. # logging模块
  9. logger = logging.getLogger(__name__)
  10. fh = logging.FileHandler('model_save.log')
  11. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  12. fh.setFormatter(formatter)
  13. logger.addHandler(fh)
  14. (2) receiver装饰器
  15. @receiver(pre_save, sender=Order)
  16. def Log(sender, **kwargs):
  17. logger.debug("{},{}".format(sender, **kwargs))

2 Django的 Q 查询:**

进行相对复杂的查询时,使用django.db.models.Q对象

  1. from django.db.models import Q
  2. from login.models import Order
  3. #...
  4. Order.objects.get(
  5. Q(id >= 20) & (id <= 100),
  6. Q(num <= 20) | (num >= 30)
  7. )

3 自定义管理器 (默认是objects)**

Django的Queryset是 查询的数据记录,objects 默认Manager管理器

  1. 需要继承Manager
  2. 定义 管理器:
  3. class AuthorManager(models.Manager):
  4. def get_queryset(self):
  5. return super(AuthorManager, self).get_queryset().filter(age__gt=3)
  6. class BookManager(models.Manager):
  7. def get_queryset(self):
  8. return super(EditorManager, self).get_queryset().filter(age_lt=2)
  9. 使用 管理器:
  10. class People(models.Model):
  11. name = models.CharField(max_length=50)
  12. pwd = models.CharField(max_length=50)
  13. age = models.IntegerField()
  14. objects = Manager() #默认的管理器
  15. 注意 自定义其他管理器后,不加上这个默认的,管理器会被自定义的覆盖掉(不能使用)
  16. people = models.Manager()
  17. authors = AuthorManager()
  18. editors = EditorManager() # 自己定义的管理器 这时候有多个管理器
  19. 使用 People.authors.all()

4 Django中 model的继承**

1 继承 抽象类 (在 父类中指定 class meta: abstract = True)

  1. a 子类中 包含了父类中的字段,
  2. b 但是作为父类的抽象类,由于没有manager,不能创建、保存。
  3. c 在子类中,不可以建立与这个抽象父类中的相同的字段,否则Django表示对报错
  4. 实例:
  5. class Animal(models.Model):
  6. age = models.PositiveIntegerField()
  7. # 下面这句决定了Animal是一个抽象类/Model
  8. class Meta:
  9. abstract = True
  10. class Human(Animal):
  11. name = models.CharField(max_length=64)
  12. sex = models.CharField('sex', choices=(('m', 'male'), ('f', 'female')), max_length=1)

2 普通继承类 ()

  1. a 父类子类 都会创建数据表,子类可以操作父类的字段,并会在两张表中都生成数据
  2. b 同样 子类不能与父类的字段重复
  3. 实例:
  4. class Animal(models.Model):
  5. age = models.PositiveIntegerField()
  6. class Human(Animal):
  7. hid = models.IntegerField(primary_key=True)
  8. name = models.CharField(max_length=64)
  9. sex = models.CharField('sex', choices=(('m', 'male'), ('f', 'female')), max_length=1)

3 代理继承类 (在 子类中指定 class meta: proxy = True)

  1. a 只创建父类 ,不会创建新的数据表
  2. b 子类中只能增加方法,而不能增加属性,在不影响父类数据存储的前提下 Proxy model 'Human' contains model fields.
  3. 使子类继承父类,此时子类称为父类的“代理”,不影响 父类的数据
  4. 实例:
  5. class Animal(models.Model):
  6. age = models.PositiveIntegerField()
  7. name = models.CharField(max_length=64,null=True,blank=True,default='')
  8. sex = models.CharField('sex', choices=(('m', 'male'), ('f', 'female')), max_length=1)
  9. class Human(Animal):
  10. # hobby = models.CharField(max_length=64,default='')
  11. class Meta:
  12. proxy = True
  13. def get_num(self):
  14. return 123 # 可以添加动态字段属性

Django 知识点补充的更多相关文章

  1. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  2. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  3. swagger知识点补充

    1. swagger知识点补充 1.1. 概述 在swagger的使用过程中,除了网上常见的例子,还会有很多细节上的东西需要注意和改写,这里我列几点我使用过程中遇到的问题和改进方式 1.2. 知识点 ...

  4. set集合,深浅拷⻉以及部分知识点补充

    set集合,深浅拷⻉以及部分知识点补充内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉主要内容: ⼀. 基础数据类型补充⾸先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的 ...

  5. Django组件补充(缓存,信号,序列化)

    Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...

  6. Python学习---django知识补充之CBV

    Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    --> ...

  7. 从零开始的全栈工程师——html篇1.8(知识点补充与浏览器兼容性)

    知识点补充 一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题 ...

  8. python day4 元组/字典/集合类知识点补充

    目录 python day4 元组/字典/集合类知识点补充 1. 元组tuple知识点补充 2. 字典dict的知识点补充 3. 基本数据类型set 4. 三元运算,又叫三目运算 5. 深复制浅复制 ...

  9. python 知识点补充

    python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...

随机推荐

  1. 20145335郝昊《java程序设计》第7周学习总结

    20145335郝昊 <Java程序设计>第7周学习总结 教材学习内容总结 认识时间与日期 格林威治标准时间:简称GMT时间,参考格林威治皇家天文台的标准太阳时间. 世界时:简称UT,借由 ...

  2. Jquery5 基础 DOM 和 CSS 操作

    学习要点: 1.DOM 简介 2.设置元素及内容 3.元素属性操作 4.元素样式操作 5.CSS 方法 DOM 是一种文档对象模型.方便开发者对HTML 结构元素内容进行展示和修改.在 JavaScr ...

  3. mac下ssh到远程服务器时中文乱码

    前言:mac本地的语言环境为英文,远程是支持中文的, 问题: 一开始是在iterm2下登录远程服务器更新数据库时发现中文注释不能正常显示,以为是iterms2下设置有问题,使用系统自带的termina ...

  4. 使用BusyBox制作根文件系统

    1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 gre ...

  5. 无线网卡在 MAC 系统下的安装与使用过程

    MAC系统安装netgear无线网卡的方法: 1)去网件官网下载相应的驱动软件 2)单击页面左侧的“Version 1.0.0.0”进入下载页面如下图 3)选择对应您系统版本的驱动程序,按右键保存到计 ...

  6. ubuntu16.04下安装mysql详细步骤

    1.如果要搭建服务器先去购买一个云主机,比如阿里云.京东云.新网等等都有卖.这里推荐使用京东云服务器,因为最近在搞活动.一元可体验两个月(可能现在活动已经过了,但在京东云里有免费领一个月的,学生机也有 ...

  7. ContOs 将SpringBoot的jar制作成系统服务

    将jar包上传到  你想要的目录下 如 /java/service/demo.jar 进入 /etc/systemd/system 目录下 新建  demo.service 内容如下 -------- ...

  8. 编译binutil包报错 error: array type has incomplete element type extern const struct relax_type md_relax_table[];

    安装lfs时编译binutils出错: ../../sources/binutils-2.15.91.0.2/gas/config/tc-i386.h:457:32: error: array typ ...

  9. jmeter随笔

    1. ${__time(yyyy-MM-dd HH:mm:ss,)} 2. import use.GetRsaContent; String pfxPath = "pfx";Str ...

  10. MooseFS技术详解

    原文 http://www.tuicool.com/articles/vQvEZ3y MooseFS是一款具有冗余容错功能的分布式文件系统.它把数据分散在多台服务器上,确保一份数据多个备份副本,对外提 ...