iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
自我挑戰組

Python 30天自我挑戰系列 第 11

Day11 - 模型與管理網站

  • 分享至 

  • xImage
  •  

今天內容主要為實作模型和使用Django提供的管理網站進行資料操作。

模型

設計模型

今天將建立兩個資料模型,其中Author和Book為一對多的關係:

  • Book
  • Author
  1. 開啟應用程式資料夾(../專案資料夾/track/)下的models.py。

  2. 新增以下程式 (Book模型):

from uuid import uuid4
from datetime import datetime

class Book(models.Model):
  bookid = models.UUIDField(primary_key=True, default=uuid4(), auto_created=True, editable=False)
  authorid = models.ForeignKey('Author', on_delete=models.SET_NULL, null=True)
  title = models.CharField(max_length=20)
  oriurl = models.CharField(max_length=100, help_text="Enter URL")
  totalsection = models.IntegerField(default=0)
  BOOK_STATUS = (
    ('s', '連載'),
    ('e', '完結'),
    ('u', '未知')
  )

  bookstatus = models.CharField(max_length=1, choices=BOOK_STATUS, default = 'u')
  istrack = models.BooleanField(default=False)
  updatetime = models.DateTimeField(default=datetime.now(), editable=False)

  class Meta:
    ordering = ['bookid']

  def __str__(self):
    return self.title
  • Field

    • bookid:書籍id,primary key,使用GUID,在新增資料時由系統自動產生,不可由使用者編輯。

    • authorid:作者id,為Author模型的foreign key,可允許空值,當該作者id於Author被刪除時會自動改為空值。

    • title:書名,最大長度為20。

    • oriurl:小說網址,最大長度為100

    • totalsection:總章節數,預設為0

    • bookstatus:連載狀態,使用BOOK_STATUS (Tuple)為選項,預設為「u」(未知)。

    • istrack:是否列入追蹤

    • updatetime:資料更新時間,不可由使用者編輯

  • Meta

    • 使用bookid排序
  • def

    • str:用來表示該模型的物件名稱,在Book模型中將回傳書名。
  1. 新增以下程式 (Author模型):
class Author(models.Model):
  authorid = models.UUIDField(primary_key=True, default=uuid4(), auto_created=True, editable=False)
  authorname = models.CharField(max_length=30)
  
  class Meta:
    ordering = ['authorid']

  def __str__(self):
    return self.authorname
  • Field

    • authorid:作者id,使用GUID,在新增資料時由系統自動產生,不可由使用者編輯。

    • authorname:作者名稱,最大長度為30。

  • Meta

    • 根據authorid排序
  • def

    • str:用來表示該模型的物件名稱,在Author模型中將回傳作者名稱。

執行Database Migrate

這個動作,會根據專案的模型,於資料庫中做對應的更新。

python manage.py makemigrate
python manage.py migrate
  • makemigrate:根據異動的model內容,產生對應的程式於migration資料夾下。

  • migrate:使用makemigrate產生的程式碼,實際於資料庫做異動。

執行完以上指令後,實際連線到MySQL資料庫中,可以看到新建立了track_book和track_author。
https://ithelp.ithome.com.tw/upload/images/20210923/20141886eVb4O9rtkB.png

管理網站

Django內建的管理網站,可以提供基礎的資料管理和權限管理功能,對於一個簡單的系統而言,可以省去另外架設後台網站的人力。

註冊模型

為了能使用管理網站進行資料操作,需要先將模型註冊在管理網站中進行註冊。

開啟應用程式資料夾(../專案資料夾/track/)下的admin.py,加入以下程式:

from .models import Book, Author

admin.site.register(Book)
admin.site.register(Author)

建立一個superuser帳號

為了能簡化後續測試流程,建立一個superuser帳號以登入管理網站。

python manage.py createsuperuser

使用管理網站

進行此階段時須先啟動伺服器。

python manage.py runserver
  1. 使用瀏覽器開啟管理網站 (這邊使用的是 http://127.0.0.1:8000/admin ),使用帳號登入後可以看到管理介面,分為權限管理和Track的模型管理兩個區塊。
    https://ithelp.ithome.com.tw/upload/images/20210923/20141886SIUkZCVDb9.png

  2. 在模型管理中,提供資料的增刪讀寫功能,而畫面中各欄位的呈現會和model中的屬性設定有關。
    https://ithelp.ithome.com.tw/upload/images/20210923/20141886DvTK4g3heG.png


上一篇
Day10 - 建立專案與應用註冊
下一篇
Day12 - 正則表示式
系列文
Python 30天自我挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言