網站搭建-django-學習成績管理-02-數據庫創建

  • 2020 年 2 月 13 日
  • 筆記

系統: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

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


以上為本次的學習內容,下回見