Django博客開發(fā)教程:用Admin管理后臺(tái)管理數(shù)據(jù)
Django是通過(guò)Model操作數(shù)據(jù)庫(kù),不管你數(shù)據(jù)庫(kù)的類型是MySql或者Sqlite,Django它自動(dòng)幫你生成相應(yīng)數(shù)據(jù)庫(kù)類型的SQL語(yǔ)句,所以不需要關(guān)注SQL語(yǔ)句和類型,對(duì)數(shù)據(jù)的操作Django幫我們自動(dòng)完成。只要回寫Model就可以了!
django根據(jù)代碼中定義的類來(lái)自動(dòng)生成數(shù)據(jù)庫(kù)表。我們寫的類表示數(shù)據(jù)庫(kù)的表,如果根據(jù)這個(gè)類創(chuàng)建的對(duì)象是數(shù)據(jù)庫(kù)表里的一行數(shù)據(jù),對(duì)象.id 對(duì)象.value是每一行里的數(shù)據(jù)。
基本的原則如下:
每個(gè)模型在Django中的存在形式為一個(gè)Python類
每個(gè)模型都是django.db.models.Model的子類
模型里的每個(gè)類代表數(shù)據(jù)庫(kù)中的一個(gè)表
模型的每個(gè)字段(屬性)代表數(shù)據(jù)表的某一列
Django將自動(dòng)為你生成數(shù)據(jù)庫(kù)訪問(wèn)API
之前我們?cè)谇懊娴臄?shù)據(jù)庫(kù)設(shè)計(jì)分析文章里已經(jīng)分析過(guò)數(shù)據(jù)庫(kù)的結(jié)構(gòu)。完成博客,我們需要存儲(chǔ)六種數(shù)據(jù):文章分類、文章、文章標(biāo)簽、幻燈圖、推薦位、友情鏈接。每種數(shù)據(jù)一個(gè)表。
分類表結(jié)構(gòu)設(shè)計(jì):
表名:Category、分類名:name
標(biāo)簽表設(shè)計(jì):
表名:Tag、標(biāo)簽名:name
文章表結(jié)構(gòu)設(shè)計(jì):
表名:Article、標(biāo)題:title、摘要:excerpt、分類:category、標(biāo)簽:tags、推薦位、內(nèi)容:body、創(chuàng)建時(shí)間:created_time、作者:user、文章封面圖片img
幻燈圖表結(jié)構(gòu)設(shè)計(jì):
表名:Banner、圖片文本text_info、圖片img、圖片鏈接link_url、圖片狀態(tài)is_active。
推薦位表結(jié)構(gòu)設(shè)計(jì):
表名:Tui、推薦位名name。
友情鏈接表結(jié)構(gòu)設(shè)計(jì):
表名:Link、鏈接名name、鏈接網(wǎng)址linkurl。
其中:
文章和分類是一對(duì)多的關(guān)系,文章和標(biāo)簽是多對(duì)多的關(guān)系,文章和作者是一對(duì)多的關(guān)系,文章和推薦位是一對(duì)多關(guān)系(看自己的需求,也可以設(shè)計(jì)成多對(duì)多)。
打開blog/models.py,輸入代碼:
這里面我們多增加了一個(gè)img圖片封面字段,用于上傳文章封面圖片的,article_img/為上傳目錄,%Y/%m/%d/為自動(dòng)在上傳的圖片上加上文件上傳的時(shí)間。
里面的模型字段與模型元數(shù)據(jù)Meta選項(xiàng)詳解我在這里就不做過(guò)多介紹,更多請(qǐng)點(diǎn)擊文章數(shù)據(jù)模型字段及屬性詳解和模型元數(shù)據(jù)Meta選項(xiàng)詳解了解。
我們已經(jīng)編寫了博客數(shù)據(jù)庫(kù)模型的代碼,但那還只是 Python 代碼而已,Django 還沒(méi)有把它翻譯成數(shù)據(jù)庫(kù)語(yǔ)言,因此實(shí)際上這些數(shù)據(jù)庫(kù)表還沒(méi)有真正的在數(shù)據(jù)庫(kù)中創(chuàng)建。我們需要進(jìn)行數(shù)據(jù)庫(kù)遷移。
在遷移之前,我們先需要設(shè)置數(shù)據(jù)庫(kù),如果我們使用默認(rèn)的數(shù)據(jù)庫(kù)的話,就不需要設(shè)置,Django默認(rèn)使用
sqlite3數(shù)據(jù)庫(kù),如果我們想使用Mysql數(shù)據(jù)庫(kù)的話,則需要我們單獨(dú)配置。我們打開settings.py文件,找到DATABASES,然后把它修改成如下代碼:
############修改成mysql如下: DATABASES?=?{ ????'default':?{ ????????'ENGINE':?'django.db.backends.mysql', ????????'NAME':?'test',????#你的數(shù)據(jù)庫(kù)名稱????????'USER':?'root',???#你的數(shù)據(jù)庫(kù)用戶名????????'PASSWORD':?'445813',?#你的數(shù)據(jù)庫(kù)密碼????????'HOST':?'',?#你的數(shù)據(jù)庫(kù)主機(jī),留空默認(rèn)為localhost????????'PORT':?'3306',?#你的數(shù)據(jù)庫(kù)端口????}}#由于mysql默認(rèn)引擎為MySQLdb,在__init__.py文件中添加下面代碼#在python3中須替換為pymysql,可在主配置文件(和項(xiàng)目同名的文件下,不是app配置文件)中增加如下代碼#import?pymysql#pymysql.install_as_MySQLdb()#如果找不到pymysql板塊,則通過(guò)pip?install?pymysql進(jìn)行安裝。
更多關(guān)于Django數(shù)據(jù)庫(kù)的配置,請(qǐng)查看官方文檔:數(shù)據(jù)庫(kù)設(shè)置
數(shù)據(jù)庫(kù)設(shè)置好之后,我們就依次輸入下面的命令進(jìn)行數(shù)據(jù)庫(kù)遷移:
python?manage.py?makemigrationspython?manage.py?migrate
遷移的時(shí)候,會(huì)有如下提示:

出現(xiàn)這個(gè)原因是因?yàn)槲覀兊幕脽魣D使用到圖片字段,我們需要引入圖片處理包。提示里也給了我們處理方案,輸入如下命令,安裝Pillow模塊即可:
pip?install?Pillow

安裝成功之后再遷移數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)遷移成功之后,程序會(huì)在blog下的migrations目錄里自動(dòng)生成幾個(gè)000開頭的文件,文件里面記錄著數(shù)據(jù)庫(kù)遷移記錄:

大家可以查看一下。了解遷移的過(guò)程。本文就不做過(guò)多介紹。
上節(jié)我們我們把數(shù)據(jù)庫(kù)遷移到數(shù)據(jù)庫(kù)里去了,那么現(xiàn)在我們數(shù)據(jù)庫(kù)里是個(gè)什么樣的情況呢?我們點(diǎn)擊Pycharm右上角的Database,然后在網(wǎng)站項(xiàng)目里選中我們的數(shù)據(jù)庫(kù)文件db.sqlite3,把它拖到Database框里。

然后點(diǎn)擊db,就可以查看到我們的網(wǎng)站數(shù)據(jù)庫(kù),我們可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改、查操作。
(在這個(gè)之前要刷新一遍database,下載組件)