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

本系列将指导您如何使用django框架搭建一个学生成绩管理网站。今天我们将聚焦于创建一个独立的项目应用,主要功能包括学习成绩查询和数据统计分析。我们将使用datatables和echarts作为前端模块。让我们从数据库创建开始讲起。

Part 1:功能描述

整个项目将包含两个网页:

  • 第一个网页:展示一张表格,允许查看所有学生在不同模拟考试中各科目的成绩。
  • 第二个网页:提供单个学生的成绩折线图查询、不同科目成绩的盒形图分布以及成绩排名柱状图。未来可能会增加更多功能。

Part 2:数据库设计

我们将设计两张表:

  • 第一张表用于存放常数项,例如班级、学生姓名、模拟考代号和科目。
  • 第二张表记录每个学生的成绩,包括班级、学生姓名、模拟考信息、科目和成绩。我们假设同一个班级内没有重名的学生。

Part 3:models

代码语言:Python 运行次数:0 运行 复制

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介绍

在过去的工作中,我们可能通过数据库操作软件或SQL语句来创建工作表。在Django项目中,我们通过在models中创建类,然后使用migrate命令来创建对应的数据库。

python manage.py makemigrations
python manage.py migrate

Django采用的是

Object-relational mapper
(ORM)方法,将传统的SQL语句操作转换为对类的操作。简单来说,一个类对应一张表,通过CharField、FloatField等类来创建对应的字段,不同的数据类型有不同的类与之对应。Meta类定义了表名(db_table),并创建了联合约束(unique_together),确保不同记录的四个字段(class_name, student_name, exam_info, course_name)不能完全相同。

makemigrations

migrate