• Django-Models


    02day Django里面的模型
    model
    在企业开发中通常都是从数据开始开发的

    ORM:
    对象关系映射
    可以理解为翻译机
    核心思想 解耦合
    将业务逻辑和SQL进行了一种转换
    例如 model里面的 save = insert query = select。ORM:翻译成不同的mysql语言,面向基础编程。

    django定义模型:
    重要概念:模型---》表,属性---》字段(三大种,字符串,数字,时间),注意不允许使用连续的下划线
    定义属性见定义属性文件
    创建模型类
    元选项,在模型类中定义Meta,用于设置元信息
    class Meta:
    db_table = xxx 定义数据表名,推荐使用小写字母
    ordering =[]
    对象的默认排序字段,获取对象列表时使用,通常是Integer类型。升序oredering['id'],降序ordering['-id']

    字段类型:
    AutoField:一个根据实际ID自动增长的IntegerField,通常不指定,如果不指定,将一个主键字段自动添加到模型中
    CharField(max_length=字段长度):字符串,默认的表单样式是:TextInput
    TextField:大文本字段,一般超过4k字段时候使用,还有那种商品字段
    integerfield:整数
    DecimaField(max_digits=None,decimal_place=None):其实和integerfield差不多,但是它的精度更加高一些
    max_digits=总位数
    decimal_place=None=小数点后的数字位数
    Floatfield:浮点型
    BooleanField:布尔型的字段,默认的表单是checkboxinput
    NullBooleanField:支持布尔型加个null
    Datafield日期
    timefield时间
    datatimefield时间日期
    FileField:一个上传文件的字段(存的是文件的路径)
    imageField:继承了FileField的所有属性和方法,但对上传的对象进行效验,确保它是一个有效的image

    自定义

    生成的mysql语言:

    模型成员objects
    Django默认通过模型的objects对象实现模型数据实现
    Django中有两个常用用于筛选记录
    filter:返回符合筛选条件的数据集
    exclude:返回不符合筛选条件的数据集
    多个filter和exclude可以连接在一起使用
    链式使用:preson.object.filter()filter().exclude().exclude().......

    创建对象的方法有很多种:
    1.def get_presons(request):
    preons = Preson.objects.create(p_age=)
    2.def get_presons(request):
    preons = Preson(p_name=xxx) 但是这种存的时候为空,是blanck形的,不能重写__init__,但是可以通过其他方法实现属性自定义赋值
    3.def add_preson(request):
    for i in range(15):
    person = Preson()
    flag = random.randrange(100)
    person.p_name = 'tom%d' %i
    person.p_age = flag
    person.p_sex = flag % 2
    person.save()

    return HttpResponse('批量创建成功')

    使用其他方法给属性自定义赋值:
    1.对象方法:可以调用对象的属性也可以调用类的属性
    2.类方法:不能调用对象属性,只能调用类属性
    3.静态方法:啥都不能调用的方法,不能获取对象属性也不能获取类属性,只是寄生在类上而已

    @classmethod
    def create(cls,p_name,p_age=18,p_sex = False):
        return cls(p_name,p_age=p_age,p_sex=p_sex)
    查询集和过滤器:
    在管理器上调用方法返回查询集
    查询经过过滤器筛选后返回的新的查询集,所以可以写成链式调用
    返回集合的方法称为过滤器:
        all()返回所有数据
        filter()返回符合条件的数据
        exclude()过滤掉符合条件的数据
        order by()排序
        values()一条数据就是一个字典,返回一个列表
    例如在views中查找:
        def get_preson(request):
            presons = Preson.objects.filter(p_age__gt=18)
            context = {
                'presons':presons
                       }
        
            return render(request,'presonslist.html',context=context)
    
    返回单个数据
    get()返回一个满足条件的对象
        如果没有找到满足条件的对象会引发模型类.DoseNotExits异常
        如果找到多个,会引发模型类.MultiObjectReturned异常
    first():返回查询集中的第一个对象
    last();返回最后一个对象
    count():返回当前查询中对象的个数
    exists():判断查询集中是否有数据,如果有返回一个True
    
    状态码:
    2xx:请求是成功的
    3xx:转发,重定向
    4xx:客户端错误
    5xx:服务器错误
    
    限制查询集和查询集的缓存:
    可以使用下标的方法进行限制:等同于sql中的limit
    xxx = XXX.objects.all()[0:5] 注意下表不能是负数
    查询集缓存:每一个查询集都包含一个缓存,来最小化对数据库的访问
    在新建的查询集中缓存初始为0,第一次查询会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询结果直接使用查询集的缓存

    字段查询
    对sql中where的实现,作为方法filter(),exclude(),get()的参数
    语法:属性名称_比较运算符=值
    外键:属性名_id
    转义:like语句中使用%是为了匹配占位,匹配数据中的%(where like '\%') filter(sname_contains='%')
    比较运算符:gt lt gte lte in(在某一集合中) contains(模糊查询) startswith(以...开始) endswith(以....结束)

    级联数据,s_grade = models.Model.ForeignKey(别的表中的属性)


    F对象:
    可以使用模型的A属性与B属性进行对比
    grades = Grade.objects.filter(ggirlnum_gt=F('gboynum'))
    grades = Grade.objects.filter(ggirlnum_gt=F('gboynum')+10)
    可以获取我们属性的值
    可以实现一个模型的不同属性的运算操作
    还可以支持算数运算


    Q对象:
    过滤器的方法中的关键参数,常用于组合条件
    年龄小于25:student.objects.filter(Q(sage__lt=25))
    Q对象语法支持 l or & and ~ 取反
    年龄大于等于25: student.objects.filter(Q(sage__lt =25))
    可以对条件进行封装
    封装之后,可以支持逻辑运算

    模型成员:这是django特有的一个
    类属性
    显性:自己写的那些
    硬性:objects是一个manager类型的对象。作用于数据库的交互
    当模型类没有指定管理器的时候,djang会自动为我们生成一个模型管理器
    当然我们可以自己定义一个自定义管理器
    class student (models.Model):
    stuManager = models.Manager()
    当自定义模型管理器的时候,objects就不存在了,django就不会为我们自动创建模型生成器

  • 相关阅读:
    如何在帮助页面添加测试工具
    如何给你的ASP.NET页面添加HelpPage
    各种序列化库的性能数据
    Quartz.NET配置
    T-SQL中只截取日期的日期部分和日期的时间部分
    sql 根据指定条件获取一个字段批量获取数据插入另外一张表字段中+MD5加密
    读取图片数据流转换成图片
    T-SQL Transact-SQL 编程
    Python 链接Mysql数据库
    c 生成随机不重复的整数序列
  • 原文地址:https://www.cnblogs.com/SmartCat994/p/12306963.html
Copyright © 2020-2023  润新知