• python--Django从创建一个项目说起


    创建项目

    首先进入一个空目录,打开操作命令行,输入:

    django-admin startproject 项目名称
    

    建立数据库连接

    进入项目目录打开settings.py文件,修改以下字段

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': '127.0.0.1',
            'PORT': '3306'
        }
    }
    

    生成应用

    生成应用:进入命令行,输入以下命令

    python manage.py startapp 应用名称
    

    注册应用:打开settings.py,在INSTALLED_APPS里加入刚创建的应用

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'test'
    ]
    

    定义模型db_index

    字段类型

    字段名称 字段释义
    AutoField 一个根据实际ID自动增长的IntegerField,通常不指定
    BooleanField true/false 字段,此字段的默认表单控制是CheckboxInput
    NullBooleanField 支持null、true、false三种值
    CharField(max_length=字符长度) 字符串,默认的表单样式是 TextInput
    TextField 大文本字段,一般超过4000使用,默认的表单控件是Textarea
    IntegerField 整数
    DecimalField(max_digits=None, decimal_places=None) 使用python的Decimal实例表示的十进制浮
    FloatField 用Python的float实例来表示的浮点数
    DateField[auto_now=False, auto_now_add=False]) 使用Python的datetime.date实例表示的日期
    TimeField 使用Python的datetime.time实例表示的时间,参数同DateField
    DateTimeField 使用Python的datetime.datetime实例表示的日期和时间,参数同DateField
    FileField 一个上传文件的字段
    ImageField 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image

    字段选项

    名称 释义
    null 如果为True,Django 将空值以NULL 存储到数据库中,默认值是 False
    blank 如果为True,则该字段允许为空白,默认值是 False
    db_column 字段的名称,如果未指定,则使用属性的名称
    db_index 若值为 True, 则在表中会为此字段创建索引
    default 默认值
    primary_key 若为 True, 则该字段会成为模型的主键字段
    unique 如果为 True, 这个字段在表中必须有唯一值

    关系

    名称 释义
    ForeignKey 一对多,将字段定义在多的端中
    ManyToManyField 多对多,将字段定义在两端中
    OneToOneField 一对一,将字段定义在任意一端中

    关系之间的访问

    a:
        字段一
    
    b:
        字段一
        c = models.ForeignKey(a)
    
    a创建出的对象.c_set.all()
    b创建出的对象.a.all()
    

    元信息

    # 在模型类中再定义一个名为Meta的类
    class a(models.Model):
        name = models.CharField(max_length = 20)
        class Meta:
            db_table = 'b'            # 此处为定义当前表的名称
            ordering = ['id']        # 对象的默认排序字段,字符串前加-表示倒序,不加表示正序(排序会增加数据库的开销)
    

    生成迁移

    python manage.py makemigrations 应用名称            # 生成迁移文件
    python manage.py migrate                                        # 生成迁移
    

    模型查询

    返回查询集的方法

    • all():查询符合条件的所有数据
    • filter():过滤数据
    • order_by():排序
    • values():返回一个字典

    返回单个值的方法

    • get():返回单个满足条件的的对象
      • 如果未找到会引发"模型类.DoesNotExist"异常
      • 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
    • count():返回当前查询的总条数
    • first():返回第一个对象
    • last():返回最后一个对象
    • exists():判断查询集中是否有数据,如果有则返回True

    限制查询集

    限制查询集类似于sql中的limit,具体用法为[0, 1].get()

    字段查询

    • contains:是否包含,大小写敏感
    filter(username__contains = 'ad')
    
    • startswith、endswith:以value开头或结尾,大小写敏感
    filter(username__startwith='ad')
    
    • isnull、isnotnull:是否为null
    filter(username__isnull=True)
    
    • in:是否包含在范围内
    filter(pk__in = [1, 2, 3, 4])
    
    • gt、gte、lt、lte:大于、大于等于、小于、小于等于
    • year、month、day、week_day、hour、minute、second:对日期间类型的属性进行运算
    filter(bpub_date__year=1980)
    filter(bpub_date__gt=date(1980, 12, 31))
    
    • 跨关联关系的查询:处理join查询
    # 语法:模型类名 <属性名> <比较>
    filter(heroinfo__hcontent__contains='八')
    

    聚合

    包括Avg(平均数),Count(数量),Max(最大值),Min(最小值),Sum(求和)

    from django.db.models import Max
    maxDate = model.aggregate(Max('bpub_date'))
    

    F对象

    如果想要用模型字段A和字段B进行比较,可以使用F对象

    from django.db.models import F
    
    model.filter(bread__gte=F('bcommet'))
    model.filter(bread__gte=F('bcommet') * 2)
    model.filter(isDelete=F('heroinfo__isDelete'))
    

    Q对象

    想实现sql逻辑或的关系,使用Q对象

    from django.db.models import Q
    
    model.filter(Q(pk__lt=6) | Q(bcommet__gt=10))
    
  • 相关阅读:
    csp-s模拟110
    csp-s模拟109
    留念
    csp-s 2019 游记
    HEOI2020
    CSP-S2019记
    堆积的$TIPS$
    低错复习
    倍增并查集
    4.26
  • 原文地址:https://www.cnblogs.com/peilanluo/p/9539380.html
Copyright © 2020-2023  润新知