首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网站搭建-django-学习成绩管理-02-数据库创建

系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2

  • 本系列介绍如何搭建一个网站,后端使用django框架
  • 今天开始介绍一个单独的项目app,关于学生成绩管理网站的搭建
  • 主要功能包括:学习成绩查询,数据统计分析
  • 涉及前端模块:Datatables、ECharts
  • 今天讲讲数据库的创建

Part 1:功能描述

  1. 整个项目包括两个网页:
    • 第1个网页:包含一张表格,可以查看所有学生不同次模拟考的不同科目的学习成绩
    • 第2个网页:单个人成绩折线图查询;单个学生不同科目成绩分布盒形图;成绩排名柱状图
  2. 目前想到这么多,后续再看看

Part 2:数据库设计

  1. 有两张表格:一张表格放置一些常数项,如班级、姓名、模拟考代号、科目
  2. 另一张表格,存放每名学生的成绩,字段有:班级、姓名、模拟考信息、科目、成绩
  3. 以上数据库假设:同一个班级没有相同姓名的学生

Part 3:models

代码语言:javascript
复制
from django.db import models


class Constants(models.Model):
    class_name = models.CharField(blank=True, null=True, max_length=10, verbose_name='班级')
    student_name = models.CharField(blank=True, null=True, max_length=10, verbose_name='学生姓名')
    exam_info = models.CharField(blank=True, null=True, max_length=20, verbose_name='模拟考信息')
    course_name = models.CharField(blank=True, null=True, max_length=20, verbose_name='科目')

    class Meta:
        db_table = 'grades_constants'
        verbose_name = "常数项"
        verbose_name_plural = verbose_name


class StudentGrades(models.Model):
    class_name = models.CharField(blank=True, null=True, max_length=10, verbose_name='班级')
    student_name = models.CharField(null=False, default='', max_length=10, verbose_name='学生姓名')
    exam_info = models.CharField(blank=True, null=True, max_length=20, verbose_name='模拟考信息')
    course_name = models.CharField(blank=True, null=True, max_length=20, verbose_name='科目')
    grades = models.FloatField(blank=False, null=False, default=0.0, verbose_name="学习成绩")

    class Meta:
        unique_together = ('class_name', 'student_name', 'exam_info', 'course_name')
        db_table = 'grades_record'
        verbose_name = "学习成绩记录"
        verbose_name_plural = verbose_name

    
   

代码截图

models.py:写创建数据库对应代码的位置

Part 4:ORM介绍

  1. 在以往的工作中,我们可能是通过数据库操作软件进行工作表的创建,或者通过SQL语句创建
  2. Django项目中我们通过在models创建类,然后再通过migrate创建对应的数据库
    • python manage.py makemigrations
    • python manage.py migrate
  3. 之所以这么做,是因为Django采用的Object-relational mapper的方法,将传统对数据库操作的sql语句改为对类的操作
  4. 简单来理解:一个类就是一张表,通过CharFieldFloatField等类创建对应的字段,不同的数据类型有不同的类与其对应
  5. Meta
    • 定义了表名db_table
    • 创建了联合约束unique_together('class_name', 'student_name', 'exam_info', 'course_name'),不同记录不能有完全相同的以上4个字段

makemigrations

migrate


以上为本次的学习内容,下回见

下一篇
举报
领券