美文网首页
Django项目Day02[项目基本流程]

Django项目Day02[项目基本流程]

作者: WenErone | 来源:发表于2018-10-23 17:31 被阅读0次

    一、模型操作

    • 配置数据库
    默认使用sqlite
    
    • 定义模型类
    # 定义 学生 模型类
    class Student(models.Model):
        # id、name、age、math、english、chinese
        # 默认Django会自动创建
        name = models.CharField(max_length=100)
        age = models.IntegerField()
        math = models.IntegerField()
        english = models.IntegerField()
        chinese = models.IntegerField()
    
    • 生成迁移文件
    python manage.py makemigrations
    python manage.py makemigrations Meituan
    

    备注: 只是生成,并没有执行,所以表单还没创建!!!!

    • 执行迁移文件
    python manage.py migrate
    
    • 模型操作(数据库的数据操作)
    增删改查
    

    二、ORM

    • 概述
      对象关系映射。O对象, R关系,M映射

    • 作用

    将对象操作转换为数据库操作,屏蔽掉不同数据库的操作!
    关注点是数据的业务逻辑处理,而不是关注数据库的具体操作!
    

    三、属性定义

    • 数据类型
    - AutoField 自增长(前提主键)
    - CharField 字符串
    - IntegerField 整形
    - FloatField 浮点型
    - DecimalField 浮点型 【设置显示位数】
        max_digits 总长度
        decimal_places 小数点后几位
    - BooleanField 布尔类型
    - NullBooleanField 支持null/true/flase
    - DateField 日期
        auto_now = True 每次保存对象时都会更新当前时间
        auto_now_add = True 第一次被创建时,设置为当前时间
    - TimeField 时间
        auto_now = True 每次保存对象时都会更新当前时间
        auto_now_add = True 第一次被创建时,设置为当前时间
    - DateTimeField  日期+时间
        auto_now = True 每次保存对象时都会更新当前时间
        auto_now_add = True 第一次被创建时,设置为当前时间
    - FileField 文件
    - ImageField 图片
    
    • 约束
    - null 设置null=True可以为空,null=False不能为空
    - primary_key 设置True标识为主键
    - unique 设置True唯一标示
    - db_colum 设置字段名,没指定属性名即为字段名
    - db_index 设置为索引
    - blank 设置为True,表示可以为空白
    
    • 关系
    - 一对一
        OneToOneField
    
    - 一对多
        ForeignKey
    
    - 多对多
        ManyToManyField
    

    都是通过外键实现!!!

    四、数据查询

    • 数据集
    - all() 全部
    
    - filter() 过滤符合条件
    
    - exclude() 去除符合条件
    
    - order_by() 排序
    
    - [x:y] 切片
    
    • 单个数据
    - get()
    
    - first()
    
    - last()
    
    • 聚合函数
    Max()、Min()、Sum()、Avg()、Count()
    
    m_chinese = Student.objects.aggregate(Max('chinese'))
    # 结果 :{'chinese__max': 80}
    
    • F对象
    在同一个记录中(对象),对应的属性比较; [自己的属性间比较]
    
    # 语文成绩 大于 英语成绩的 学生信息
    students = Student.objects.filter(chinese__gt=F('english'))
    
    • Q对象
    条件封装,封装之后,可以进行与或非操作!
    
    # 语文成绩大于80 或 数学成绩大于60 的学生信息
    students = Student.objects.filter(Q(chinese__gt=80) | Q(math__gt=60))
    
    # 英语成绩大于60
    # students = Student.objects.filter(english__gt=60)
    students = Student.objects.filter( ~Q(english__lte=60) )
    

    五、数据操作

    - 增
        实例化对象
        对象赋值
        添加到数据 save()
    
    - 删
        找到对应的数据
        调用删除方法 delete()
    
    - 改
        找到对应的数据
        更新对象
        同步到数据库 save()
    
    - 查
        根据不同条件,获取对应的数据
    

    六、数据库配置

    • sqlite配置(系统默认)
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    • mysql
    # 工程目录下__init__.py中添加
    import pymysql
    pymysql.install_as_MySQLdb()
    
    # 工程目录下settings.py中
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            # create database szpython18091023 charset=utf8;
            'NAME': 'szpython18091023', # 连接数据库的名称 【前提是数据库中得有这个数据库】
            'USER': 'root', # 数据库用户名
            'PASSWORD': '123456',   # 数据库密码
            'HOST': '127.0.0.1',    # 主机
            'POST': '3306'          # 端口号
        }
    }
    

    前提: pip install pymysql

    相关文章

      网友评论

          本文标题:Django项目Day02[项目基本流程]

          本文链接:https://www.haomeiwen.com/subject/yifazftx.html