Django搭建開發‘學習筆記’專案二(建立應用程式)
Django專案由一系列應用程式組成,它們協同工作讓專案成為一個整體。
進入目錄learn_log,並激活虛擬環境,再執行命令python3 manage.py startapp learning_logs,建立應用程式
命令startapp appname讓Django搭建並建立應用程式所需的基礎設施。執行後ls檢視目錄可看到其中新增了learning_logs資料夾。資料夾中最重要的檔案為models.py、admin.py和views.py。其中models.py用來定義要在應用程式中管理的資料,後續介紹admin.py和views.py。
一、定義模型
開啟檔案models.py
這裡匯入了模組models,並讓我們建立自己的模型。模型告訴Django如何處理應用程式中儲存的資料。在程式碼層面,模型就是一個類。
如下表示使用者將儲存的主題的模型:
from django.db import models class Topic(models.Model): """使用者學習的主題""" text = models.CharField(max_length=200) date_added = models.DateTimeField(auto_now_add=True) def __str__(self):"""返回模型的字元型別""" return self.text # Create your models here.
text屬性是一個CharField---由字元組成的資料,即文字。需要儲存少了文字,如名稱、城市、標題時,可使用CharField。定義CharField屬性時一定要告訴Django該在資料庫中預留多少空間。
date_added是一個DateTimeField---記錄日期和時間的資料。使用實參auto_now_add=True,每當使用者建立新主題時,Django都會將這個屬性自動設定為當前日期和時間。
二、啟用模型
要使用這些模型,必須讓Django將前述應用程式包含到專案中。為此,開啟settings.py(位於目錄learning_log/learning_log中),其中以下部分告訴Django哪些應用程式被安裝到了專案並將協同工作:
將前面建立的應用程式learning_logs新增到這個列表
通過將應用程式分組,在專案不斷增大,包含更多應用程式是,有助於對應用程式進行跟蹤。
接下來需要修改資料庫,使其能夠儲存與模型Topic相關的資訊,為此,在終端視窗中執行命令:python3 manage.py makemigrations learning_logs
makemigrations讓Django確定如何修改資料庫,使其能夠儲存與前面定義的新模型相關聯的資料。輸出表明Django建立了一個名為0001_initial.py的遷移檔案,這個檔案將在資料庫中未模型Topic建立一個表。
現在應用這種遷移,讓Django修改資料庫,執行命令:python3 manage.py migrate
(每當需要修改管理的資料時,都需要採取這三個步驟,先修改models.py,然後對learning_logs呼叫makemigrations,然後讓Django遷移專案)
即修改後需要python3 manage.py makemigrations APP_NAME然後python3 manage.py migrate
三、Django管理網站
1、為網站建立超級使用者
執行命令python3 manage.py createsuperuser,輸入使用者名稱密碼
2、向管理網站註冊模型
Django自動在管理網站中添加了一些模型,如User和Group,對於我們建立的模型,需要手工進行註冊。
我們建立應用程式learning_logs時,Django在models.py所在目錄中建立了一個名為admin.py檔案,進行如下修改:
models前面的句點是為了讓Django在admin.py所在目錄查詢models.py。admin.site.register(Topic)讓Django通過管理網站管理模型.
訪問localhost:8000/admin並輸入剛剛建立的超級使用者名稱和密碼,就可以看到管理介面
可以新增一個Chess主題
四、定義模型Entry
要記錄學到的Chess知識,使用者必須能夠在學習筆記中新增條目。為此需要定義相關的模型,新增模型entry來顯示主題下的條目:models.py下新增
class Entry(models.Model): """學到的有關某個主題的具體知識""" topic = models.ForeignKey(Topic, on_delete=models.CASCADE) text = models.TextField() date_added = models.DateTimeField(auto_now_add=True) class Meta: verbose_name_plural = 'entries' def __str__(self): """返回模型的字串表示""" return f"{self.text[:50]}..."
五、遷移模型Entry
新增新模型後需要再次遷移資料庫
依次執行命令:python3 manage.py makemigrations learning_logs、python3 manage.py migrate
六、向管理網站註冊Entry
admin.py修改:
from django.contrib import admin from .models import Topic, Entry admin.site.register(Topic) admin.site.register(Entry) # Register your models here.
返回http://127.0.0.1:8000/admin/,將可新增知識,新增知識時選擇對應主題