系统:Windows 7
语言版本:Anaconda3-4.3.0.1-Windows-x86_64
编辑器:pycharm-community-2016.3.2
- 本系列介绍如何搭建一个网站,后端使用django框架
- 今天开始介绍一个单独的项目app,关于学生成绩管理的网站的搭建
- 主要功能包括:学习成绩查询,数据统计分析
- 涉及前端模块:Datatables、ECharts
- 今天讲讲数据库的创建
Part 1:功能描述
- 整个项目包括两个网页:
- 第1个网页:包含一张表格,可以查看所有学生不同次模拟考的不同科目的学习成绩
- 第2个网页:单个人成绩折线图查询;单个学生不同科目成绩分布盒形图;成绩排名柱状图
- 目前想到这么多,后续再看看
Part 2:数据库设计
- 有两张表格:一张表格放置一些常数项,如班级、姓名、模拟考代号、科目
- 另一张表格,存放每名学生的成绩,字段有:班级、姓名、模拟考信息、科目、成绩
- 以上数据库假设:同一个班级没有相同姓名的学生
Part 3:models
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
代码截图
6.png
models.py:写创建数据库对应代码的位置
7.png
Part 4:ORM介绍
- 在以往的工作中,我们可能是通过数据库操作软件进行工作表的创建,或者通过SQL语句创建
- 在Django项目中我们通过在models创建类,然后再通过migrate创建对应的数据库
- python manage.py makemigrations
- python manage.py migrate
- 之所以这么做,是因为Django采用的
Object-relational mapper
的方法,将传统对数据库操作的sql语句改为对类的操作 - 简单来理解:一个类就是一张表,通过CharField,FloatField等类创建对应的字段,不同的数据类型有不同的类与其对应
- Meta类
- 定义了表名
db_table
- 创建了联合约束
unique_together('class_name', 'student_name', 'exam_info', 'course_name')
,不同记录不能有完全相同的以上4个字段
- 定义了表名
makemigrations
1.png
migrate
2.png
以上为本次的学习内容,下回见
长按图片识别二维码,关注本公众号
Python 优雅 帅气
12x0.8.jpg