django Model部分(一)

Model

MTV
  • M:model,模型,和mvc中的M功能相同,和数据库进行交互。
  • V:view ,视图,和MVC中的c功能相同,接受请求,进行处理,与M和T进行交互,返回应答。
  • T:Template,模板,和mvc中的v相似,产生html界面
  • 1、用户点击注册按钮,将要注册的内容发送给网站的服务器。
  • 2、view视图接收到用户发来的注册数据,View告诉Model将用户的注册信息保存进数据库。
  • 3、Model层将用户的信息保存到数据库中。
  • 4、数据库将保存的结果返回给Model
  • 5、Mode将保存的结果给View视图。
  • 6、view视图告诉Template模板去产生一个html界面。
  • 7、Templage生成html内容返回给view视图
  • 8、view视图将html界面内容返回给浏览器
  • 9、浏览器拿到view返回的html页面内容进行解析,展示。
开发流程
  • 1 配置数据库
  • 2 定义模型类(一个类对应一张表)
  • 3 生成迁移文件
  • 4 执行迁移生成数据表
  • 5 使用模型类进行增删改查(CRUD)
ORM
  • 对象关系映射

  • 可以理解为翻译机

  • 核心思想是解耦合

    • 将业务逻辑和SQL进行解耦合
  • 新增 save()

  • 更改 save()

  • 删除 delete()

  • 逻辑删除

  • id能生成自增id

  • 字段类型

    • CharField:字符串,表单控件对应TextInput;
    • TextField:大文本字段,长度超过4000时,对应TextArea;
    • IntegerField:整数;
    • DecimalField:十进制浮点数,精度更改,不会因为小数产生误差;
    • FloatField:浮点书;
    • BooleanField:布尔值;
    • NullBooleanField:Null、True、False;
    • DateField:日期;
    • FileField:文件上传字段;
    • ImageField:只存图片文件;
  • 字段选项

    • null
    • blank
    • db_table 表名(可自定义)
    • db_column,字段名称
    • db_index,若值为True,则会添加索引
    • default
    • primary_key 主键
    • unique 唯一值
    • ordering 在查询数据时的排列规则
    • max_length
  • 关系

    • ForeignKey:一对多,将字段定义在多的端中
  • 过滤器(查)

    • filter:返回复合帅选条件的数据集
    • exclude:返回不符合筛选条件的数据集
      • 多个filter和exclude可以连接起来使用
        • 链式调用
        • Person.object.filter().filter().exclude()
    • order_by: 排序
    • values:将数据转为字典,并返回列表
    • all:获取所有
    • get:获取一个值
      • 没有获取时会抛异常
      • 当查询条件存在多个对象,会报错
    • first:获取查询集中的第一个值
    • last:获取查询集中的最后一个值
      • last和first可能会获取同一个数据,需要先手动排序
    • count:获取查询集中的数量
    • exists:判断查询集中是否有值,有则返回True
方法
  • 对象方法
    • 可以调用对象的属性,也可以调用类的属性
  • 类方法
    • 不能调用对象属性,只能调用类属性
  • 静态方法
    • 什么都不能调用
    • 寄生在别的类上
状态码
  • 2xx
    • 请求成功
  • 3xx
    • 重定向
  • 4xx
    • 客户端错误
  • 5xx
    • 服务端错误
    • 后端开发应避免
查询切片
  • QuerySet[5:15],获取第5到第15条数据;
    • 在查询数据库的时候就直接进行切片;
    • 相当于sql中的limit和offset;
      • 如users = User.objects.all()[2: 5];
      • 下标不能是负数;
缓存集
  • filter
  • exclude
  • all
  • 以上操作都不真正地查询数据库;
  • 只有在迭代结果集,或者获取单个对象属性时才会查询数据库;
    • 懒查询;
查询条件
  • 属性__运算符=值;

  • 以下均为运算符:

    • gt 大于
    • lt 小于
    • gte
    • lte
    • in 在某一集合中
    • contains 类似于模糊查询,类似like
    • startswith 以xx开始,类似like
    • endswidth 以xx结束,类似like
    • isnull 为空;
    • isnotnull 不为空;
    • 前面均可添加i,即忽略:
      • icontains
      • istartswidth
      • iexact 不等于
  • year、month、day、week_day、hour、minute、second

    • filter(lasttime__year=2017);
    • 存在时区问题;
      • 关闭django自定义的时区;
        • setting中:USE_TZ改为False
      • 在数据库中创建对应的时区表;
跨关系查询
  • 从元素查表;
  • 根据级联查到的数据;
  • 直接根据学生信息查班级;
    • grades = Grade.objects.filter(student__s_name=‘1’);
聚合函数
  • Avg
  • Count
  • Max
  • Min
  • Sum
    • 如Student.objects().aggregate(Max(‘sage’))
    • 获取Student表中sage字段最大值;
    • 返回的结果:{‘sage__max’: 9};
F对象
  • 可以获取属性的值;
  • 可以实现一个模型的不同属性的运算操作;
  • 可以使用模型的A属性与B属性进行比较
    • 如查找一个男生数量少与女生的公司;
    • companies = Company.objects.filter(c_boy_num__lt=F(‘c_girl_num’));
    • companies = Company.objects.filter(c_boy_num__lt=F(‘c_girl_num’)-15);
      • 女生数减男生数大于15的公司;
  • 支持算术运算;
Q对象
  • 对查询条件进行封装;
  • 封装后支持逻辑运算(与或非);
    • 如男生数大于1,女生数大于20的查询条件;
    • companies = Company.objects.filter(Q(c_boy_num__gt=1) & Q(c_girl_num__gt=20))
模型成员
  • 显性属性
    • 开发者手动书写的属性
  • 隐性属性
    • 开发者没有书写,orm自动生成的属性;
    • 隐性属性被手动声明,系统就不会产生了,变成显性的了;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值