(三)Django2——模型與站點
資料庫配置
開啟 mysite/settings.py
。這是個包含了 Django 專案設定的 Python 模組。
通常,這個配置檔案使用 SQLite 作為預設資料庫。本篇文章將利用MySQL作為示例。
修改mysite/settings.py配置檔案資料庫設定模組
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blog', 'USER': 'root', 'PASSWORD': '123456', 'HOST': 'localhost', 'PORT': '3306', } }
在這裡順便更改一下市區設定與語言
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
修改mysite/_init_.py,新增如下程式碼
import pymysql
pymysql.install_as_MySQLdb()
此外,關注一下檔案頭部的 INSTALLED_APPS 設定項。這裡包括了會在你專案中啟用的所有 Django 應用。應用能在多個專案中使用,你也可以打包並且釋出應用,讓別人使用它們。
通常, INSTALLED_APPS 預設包括了以下 Django 的自帶應用:
- django.contrib.admin -- 管理員站點, 你很快就會使用它。
- django.contrib.auth -- 認證授權系統。
- django.contrib.contenttypes -- 內容型別框架。
- django.contrib.sessions -- 會話框架。
- django.contrib.messages -- 訊息框架。
- django.contrib.staticfiles -- 管理靜態檔案的框架。
這些應用被預設啟用是為了給常規專案提供方便。
預設開啟的某些應用需要至少一個數據表,所以,在使用他們之前需要在資料庫中建立一些表。請執行以下命令:
python manage.py migrate
這個 migrate 命令檢查 INSTALLED_APPS 設定,為其中的每個應用建立需要的資料表,至於具體會建立什麼,這取決於你的 mysite/settings.py 設定檔案和每個應用的資料庫遷移檔案(我們稍後會介紹這個)。 就像之前說的,為了方便大多數專案,我們預設激活了一些應用,但並不是每個人都需要它們。如果你不需要某個或某些應用,你可以在執行 migrate 前毫無顧慮地從 INSTALLED_APPS 裡註釋或者刪除掉它們。 migrate 命令只會為在 INSTALLED_APPS 裡聲明瞭的應用進行資料庫遷移。
建立模型
截下來建立我們自己應用的模型,模型是真實資料的簡單明確的描述。它包含了儲存的資料所必要的欄位和行為。模型是真實資料的簡單明確的描述。它包含了儲存的資料所必要的欄位和行為。
按照下面的例子來編輯 blog/models.py 檔案:按照下面的例子來編輯 blog/models.py 檔案:
from django.db import models
#分類
class Sorts(models.Model):
sort_name = models.CharField(max_length = 50,null = False)#分類名稱
sort_description= models.CharField(max_length = 100)#分類描述
sort_date = models.DateField(auto_now_add=True)#發表日期
def __str__(self):
return self.sort_name
#博文
class Articles(models.Model):
art_title = models.CharField(max_length = 50,null = False)#標題
art_content = models.TextField(null = False)#內容
art_views = models.IntegerField(default=0)#瀏覽量
art_comment_count = models.IntegerField(default=0)#評論數
art_date = models.DateField(auto_now_add=True)#發表日期
art_like_count = models.IntegerField(default=0)#點贊數
art_sort = models.ForeignKey(Sorts,on_delete=models.CASCADE)#分類
def __str__(self):
return self.art_title
程式碼非常直白。每個模型被表示為 django.db.models.Model 類的子類。每個模型有一些類變數,它們都表示模型裡的一個數據庫欄位。
每個欄位都是 Field 類的例項 - 比如,字元欄位被表示為 CharField ,日期時間欄位被表示為 DateTimeField 。這將告訴 Django 每個欄位要處理的資料型別。
每個 Field 類例項變數的名字也是欄位名,所以最好使用對機器友好的格式。你將會在 Python 程式碼裡使用它們,而資料庫會將它們作為列名。
你可以使用可選的選項來為 Field 定義一個人類可讀的名字。這個功能在很多 Django 內部組成部分中都被使用了,而且作為文件的一部分。如果某個欄位沒有提供此名稱,Django 將會使用對機器友好的名稱,也就是變數名。在上面的例子中,我們只為 Question.pub_date 定義了對人類友好的名字。對於模型內的其它欄位,它們的機器友好名也會被作為人類友好名使用。
定義某些 Field 類例項需要引數。例如 CharField 需要一個 max_length 引數。這個引數的用處不止於用來定義資料庫結構,也用於驗證資料,我們稍後將會看到這方面的內容。
注意在最後,我們使用 ForeignKey 定義了一個關係。這將告訴 Django,每個 Articles物件都關聯到一個 Sorts物件。Django 支援所有常用的資料庫關係:多對一、多對多和一對一。
啟用模型
上面的一小段用於建立模型的程式碼給了 Django 很多資訊,通過這些資訊,Django 可以:
為這個應用建立資料庫 schema(生成 CREATE TABLE 語句)。 建立可以與 Articles 和 Sorts 物件進行互動的 Python 資料庫 API。 但是首先得把 blog 應用安裝到我們的專案裡。
為了在我們的工程中包含這個應用,我們需要在配置類 INSTALLED_APPS中新增設定。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
現在Django專案包含這個blog應用了
python manage.py makemigrations polls
然後再執行
python manage.py migrate
將會根據上面建立的兩個class建立對應的資料庫表
出示API
現在讓我們進入互動式 Python 命令列,嘗試一下 Django 為你建立的各種 API。通過以下命令開啟 Python 命令列:
python manage.py shell
我們使用這個命令而不是簡單的使用 "Python" 是因為 manage.py 會設定 DJANGO_SETTINGS_MODULE 環境變數,這個變數會讓 Django 根據 mysite/settings.py 檔案來設定 Python 包的匯入路徑。
當你成功進入命令列後,來試試 database API 吧:
from blog.models import Sorts, Articles # Import the model classes we just wrote.
Articles.objects.all()
上述首先匯入包,然後查詢所有Article表資料,更多API不再一一舉例
介紹 Django 管理頁面
為你的員工或客戶生成一個使用者新增,修改和刪除內容的後臺是一項缺乏創造性和乏味的工作。因此,Django 全自動地根據模型建立後臺介面。
Django 產生於一個公眾頁面和內容釋出者頁面完全分離的新聞類站點的開發過程中。站點管理人員使用管理系統來新增新聞、事件和體育時訊等,這些新增的內容被顯示在公眾頁面上。Django 通過為站點管理人員建立統一的內容編輯介面解決了這個問題。管理介面不是為了網站的訪問者,而是為管理者準備的。
首先,我們得建立一個能登入管理頁面的使用者。請執行下面的命令:
python manage.py createsuperuser
然後按照提示填寫使用者名稱,密碼、郵箱等。
Django 的管理介面預設就是啟用的。讓我們啟動開發伺服器,看看它到底是什麼樣的。
如果開發伺服器未啟動,用以下命令啟動它:
python manage.py runserver
現在,開啟瀏覽器,轉到你本地域名的 "/admin/" 目錄, -- 比如 "http://127.0.0.1:8000/admin/" 。你應該會看見管理員登入介面
然後輸入剛才建立賬號密碼登陸。
你將會看到幾種可編輯的內容:組和使用者。它們是由 django.contrib.auth
提供的,這是 Django 開發的認證框架。
向管理頁面中新增部落格應用
但是我們的部落格應用在哪呢?它沒在索引頁面裡顯示。
只需要做一件事:我們得告訴管理頁面,開啟 blog/admin.py檔案,把它編輯成下面這樣:
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Articles)
admin.site.register(Sorts)
現在我們向管理頁面註冊了問題 Articles類與Sorts類。Django 知道它應該被顯示在索引頁裡,接下來便可通過管理頁面進行資料管理。