在初始化 Project 時,我們需要 "新增" 課程類別到 Database 裡面,因此我們必須撰寫 Script ,利用特定的格式來引入課程類別。
同時,前端要利用我們產生的課程類別 JSON 去搜尋課程或是創建課程(下拉式選單)。
這個 JSON 將會產生在/ShareClass/shareclass/static/dist/file/category.json
會以 static file 的方式利用 nginx 提供給 client,並且都要重新執行 django collectstatic 的指令將 static file 生成給 nginx 使用。
!!!注意: 如果我們使用多台 Application Server 的時候,就必須要將這個 JSON 分離,產生在 AWS S3,利用 S3 的功能管理 static file!!!
auto_generate_course_category/
generate_course_structure_from_DB/
我們將 import 課程類別的 script 命為:
auto_generate_course_category
class CourseCategory(models.Model):
name = models.CharField(blank=False, max_length=20)
name_path = models.CharField(blank=True, max_length=50)
slug = models.SlugField(blank=True, max_length=50, allow_unicode=True)
description = models.TextField(blank=True)
parent_category = models.ForeignKey("self", blank=True, null=True, related_name="subcategory")
level = models.PositiveSmallIntegerField(blank=True) # 用來標記階層等級
我們設計用來自動產生 CourseCategory Object 的 script 要能夠填上 name
, name_path
, parent_categry
, level
這幾個欄位。對於 description
欄位來說,是保留用的,目前沒有用到。對於 slug
來說,物件在創建的時候,會根據他的 name
做 slugify 的處理而自動產生,因此我們也不需要做這部分。
name_path
以及 level
是方便我們查看以及定位物件使用。
產生出來的類別物件在後台看起來會是這樣:
generate_course_structure_from_DB
這是利用 DB 中 CourseCategory object 來產生 JSON 的 script。之所以會有兩種產生 json 的 script 是因為歷史沿革,當初技術不足。第一種產生 json 的 script 是以 list 的方式產生下拉選單。第二種產生 json 的 script 是以 key-value 的方式來產生下拉選單。因為目前是使用第二種,所以也因此導致我們課程的下拉選單沒辦法照引入順序排序。詳細的檔案格式請拉到最下方見附錄
要改善下拉選單的順序性,主要是可以朝兩個方向:
引入課程類別
目前因為不是寫成 django command 的形式,所以只能用將 script code 貼到 django shell 的方式。因此,要引入的類別檔案也必須 hard-code 在 script code 裡面,這是不方便的地方。
步驟:
$ ./manage.py shell
產生課程類別 JSON
步驟:
$ ./manage.py shell
更新網頁 static 檔(這在 local 端測試時不需要這個步驟,使用到 nginx 才需要)
更新 staticfile:
$ ./manage.py collectstatic
Restart nginx:
$ sudo service nginx restart
/auto_generate_course_category/generate.py
改成支援參數的方式,以參數來指定引入的課程架構文件。