django-MVC

image.png

模型开发流程

  1. 配置数据库
  2. 定义模型类(一个模型类对应数据库中的一张表)
  3. 生成迁移文件(生成sql语句脚本)python manage.py makemigrations
  4. 执行迁移文件(生成数据库表)python manage.py migrate
  5. 使用模型进行增删改查操作

ORM(关系对象映射)

核心思想:解耦合,将业务逻辑和SQL进行解耦
可以理解为翻译机,翻译成不同的语言

定义模型

  1. 数据库中的数据类型
    字符串:char,varchar,text,longText,set等
    数字:int,tinyint,double,float
    时间:date,year等
  2. 不同的数据类型内存分配不一样

其他

  1. 用于设置元信息
    class Meta:
    db_table = 'userss' # 表名
    ordering = ['id'] # 通过id升序排列
  2. 通过对模型对象(objects)来实现对模型的查询
    两种常用的过滤器,可以连续使用
    (1)filter:过滤满足条件的数据
    (2)exclude:过滤不满足条件的数据(不包含)
    (3)all():返回所有数据
    (4)order_by():排序,默认根据id排序,如果要倒序,使用order_by("-id")
    (5)values():一条数据就是一个json,返回一个列表
    (6)get():查询结果没有或者超过1个,都会抛异常
    (7)first()/last():可能会出现第一个和最后一个是同一个对象(解决方法:先排序在查找)
    (8)count():查询集合的数量
    (9)exists():结果集合是否有数据
    (10)切片:左闭右开,querySet[1:4], 如:Users.userObj.all()[1:5]
    查询后的结果不是列表,是结果集合
    查询集表示从数据库获取的对象集合

    不管查询多少次,都不会真正去查询数据库,只有在获取结果集中的属性才会去查询数据库
    查询条件
    pk:主键
    gt:大于
    lt:小于
    gte:大于等于
    lte:小于等于
    =
    in
    contains
    startwith/endwith
    前面同时添加i(ignore)如icontains/istartwith
    备注:
    django查询条件有时区问题,解决方法:
    关闭自定义市区(settings中USE_TZ = False)
    (11)aggregate(max(属性))
    aggregate(count(xx))
    aggregate(avg(xx))

3、模型成员
显性属性:开发写的
隐形属性:
ORM自动生成
如果把隐形属性声明了,系统不会产生隐形属性
如:a_m = models.Manager(),作用=objects
当一个方法重复写了几次,可以考虑封装

  1. 方法
    对象方法:可以调用对象的属性,也可以调用类的属性
    a. 方法参数中第一个是self
    b. 通过self调用类中的属性
    c. 支持对象调用对象方法,不支持类名调用对象方法

类方法:可以调用类的属性,不能调用对象的属性
a. 用@classmethod装饰
b. 类方法中传入一个类名(cls)
c. 通过类名调用类中的属性cls.xxx
d. 支持对象来调用类方法,也支持类名调用类方法
e. 类方法对类属性进行的处理是有记忆性的

*静态方法:都不能调用,不能获取对象属性,也不能获取类的属性,只是寄生在类中
a.用@staticmethod装饰
b.静态方法无法调用属性值,所以不会对类中的方法进行操作
c.如果一个方法跟类里面的属性没有任何关联时使用静态方法
d.支持对象和类名调用静态方法

你可能感兴趣的:(django-MVC)