zoukankan      html  css  js  c++  java
  • Django项目总结:Model 和 ORM

    【准备】

    打开项目 =》配置解释器

    将App注册到settings中

    (访问点HOSTS,APPS,建模板t =》DIRS+路径,数据库 =》mysql)

    创库:mysql> create database GP1DjangModel charset=utf8;

    伪装驱动:__init__.py

    执行迁移:python manage.py migrate

    添加数据库

    Model

    -- 在企业开发中,通常从数据开始开发

    -- 开发流程

      -- 配置数据库

      -- 定义模型类(一个模型类对应数据库的一张表)

      -- 生成迁移文件

      -- 执行迁移,生成数据表

      -- 使用模型类进行增删改查(GRUD)操作

     

    ORM(Object Relational Mapping)对象关系映射

    -- 一种程序技术

    -- 用于实现面向对象编程语言里不同类型系统的数据之间的转换

    -- 相当于翻译机

    -- 核心思想解耦合

      -- 将业务逻辑和SQL进行了解耦

    【Django定义模型】

    -- 概念:模型,表,属性,字段

    -- 对应关系

      -- 一个模型类 => 数据库中一张表

      -- 模型类中定义的属性 => 对应该模型对照表中的一个字段(列)

      -- 字段(列)数据类型:字符串,数字,时间

    -- 定义属性

    -- 创建模型类

    -- 元选项(类中类),在模型类中定义Meta,用于设置元信息

    python manage.py makemigrations

    python manage.py migrate

     

    urls.py

    【模型成员 objects】

    -- Django默认通过模型的 objects 对象实现模型数据查询

    -- Django有两种过滤器用于筛选记录

      -- filter:返回符合筛选条件的数据集

      -- exclude:返回不符合筛选条件的数据集

      -- 多个filter和exclude可以连接在一起查询

        -- 连续使用,链式调用

        -- Person.objects.fiter().filter().xxx.exclude().exclude().yyy

    templates => person_list.html

    views.py

     

     pers是一个查询结果集,QuerySet

    过滤条件

    方法

    -- 对象方法

      -- 可以调用对象的属性,也可以调用类的属性

    -- 类方法

      -- 不能调用对象属性,只能调用类属性

    -- 静态方法

      -- 不能调用对象属性,也不能调用类属性

      -- 寄生在类上

     

    【创建对象】

    -- 目的:向数据库中添加数据

    -- save()

      -- 创建对象时,调用save()方法,才会将对象保存到数据库中

    -- __init__已经在父类models.Model中使用,自定义模型中不能使用

    -- 创建对象方案

      -- 在模型类中增加类方法去创建对象

        @classmethod

        def create(cls, name, age):

        -- 在定义的管理器中添加方法来创建对象

    状态码

    -- 2xx -> 请求成功

    -- 3xx -> (请求)转发或重定向

    -- 4xx -> 客户端错误

    -- 5xx -> 服务器错误

     

    【返回单个数据】

    -- get():返回一个满足条件的对象

      -- 没有找到符合条件的对象,会引发 模型类.DoesNotExist异常

      -- 找到多个,会引发 模型类.MultiObjectsReturned 异常

    -- first():返回查询集中的第一个对象

    -- last():返回查询集中的最后一个对象

    -- count():返回当前查询集中的对象个数

    -- exists():判断查询集中是否有数据,如果有数据返回True没有反之

    验证count(),同exists(),用来辅助判断

     

    表中添加用户密码

     

    检验用户密码登陆

    -- 限制查询集,类似切片

      -- 使用下标的方法进行限制

      -- 和python中的切片不太一样

      -- studentList = Student.objects.all()[0:5]    下标不能是负数

      -- 相当于SQL中的 limit 和 offset

    -- 查询集的缓存

      -- 每个查询集都包含一个缓存,来最小化对数据库的访问

      -- 在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存。

      -- filter,exclude,all都不会真正去查询数据库

      -- 只有迭代结果集,或获取单个对象属性时,才会去查询数据库

      -- 懒查询

     

    -- django中查询条件有时区问题

      -- 关闭django中自定义的时区

        -- setting =》USE_TZ =False

      -- 在数据库中创建对应的时区表

     

    跨关系查询

      -- 模型类名__属性名__比较运算符

      -- 实际上就是处理的数据库中的join

      -- grade = Grade.objects.filter(student__scontend__contains='小明')

      -- 描述中带有'小明'这三个字的数据属于哪个班级

     

    聚合函数

    -- 使用aggregate()函数返回聚合函数的值

    -- Avg:平均值

    -- Count:数量

    -- Max:最大

    -- Min:最小

    -- Sum:求和

    -- Student.objects().aggregate(Max('sage'))

     

    F对象

    -- 可以使用模型的A属性与B属性进行比较

      -- grades = Grade.objects.filter(ggirlnum__gt=F('gboynum') )

    -- F对象支持算数运算

      -- grades = Grade.objects.filter(ggirlnum__gt=F('gboynum') +10 )

    -- 可以获取我们属性的值

    -- 可以实现一个模型的不同属性的运算操作

    -- 支持算术运算

    Q对象

    -- 可以对条件进行封装

    -- 过滤器的方法中的关键参数,常用于组合条件

    -- Q对象语法支持逻辑运算  | (or), & (and), ~(取反)

    -- Student.objects.filter(Q(sage__lt=25)) # 年龄小于25

    -- Student.objects.filter(~Q(sage__lt=25)) # 年龄大于等于25 

    【模型成员】

    -- 显性属性

      -- 开发者手动书写的属性

    -- 隐形属性

      -- objects 是Manager类型的一个对象,用于数据库交互

      -- 不是开发者写的,ORM自动生成的

      -- 当模型类没有指定管理器的时候,Django会自动为我们创建模型管理器

      -- 如果把隐形属性手动声明了,系统就不会产生隐形属性

    -- 模型管理器

      -- 是Django的模型与数据库进行交互的接口

      -- 一个模型可以有多个模型管理器

      -- 自定义模型管理器的作用

        -- 可以向管理器中添加额外的方法

        -- 修改管理器返回的原始查询集

        -- 提供创建对象的方式

    1.自定义管理器对象后,默认 objects 失效

    报错信息

    2.表中定义一个是否删除字段

    自定义模型管理器

    从现在开始,种下梦想中的参天大树
  • 相关阅读:
    [每周心学]先生王阳明何许人也?
    CET-6 分频周计划生词筛选(番外篇:百词斩)
    CET-6 分频周计划生词筛选(Week 3)
    架构之美阅读笔记三
    架构之美阅读笔记二
    架构之美阅读笔记一
    软件需求分析课堂讨论01
    问题账户需求分析
    2016年秋季个人阅读计划
    个人总结
  • 原文地址:https://www.cnblogs.com/dc2019/p/13296707.html
Copyright © 2011-2022 走看看