Django_study_day06:後臺管理
後臺管理
假設,我們接到一個設計新聞網站的專案,我們需要編寫展示給使用者的頁面,但是網頁上展示的新聞資訊都是從哪裡來的呢?回答:是從資料庫中查詢使用者所需檢視的新聞資訊,然後把它展示在頁面上。但是新聞網站上的新聞每天甚至每時每刻都要更新,這就意味著需要頻繁的操作資料庫的增、刪、改、查。難道我們每天都需要寫sql語句操作資料庫嗎? 如果這樣的話,是不是非常的繁瑣,所以我們可以設計一個頁面,通過對這個頁面的操作來實現對資料庫的增刪改查操作
那麼問題在於,boss說我們需要建立一個網站,這個網站要通過頁面來實現對資料庫的操作,但是這樣操作資料庫,有很大的重複性,那有沒有一種方法能夠讓我們很快的生成管理資料庫表的頁面呢?有,那就是我們接下來要給大家講的Django的後臺管理。Django能夠根據定義的模型類自動地生成管理頁面
使用Django的管理模組,需要按照如下步驟操作:
1.管理介面本地化
本地化是指將語言時間等都設定為本地語言和時間
中國大陸地區使用簡體中文,時區使用亞洲/上海時區,注意這裡不使用北京時區表示(因為沒有北京時間)
我們之前已經修改過,但是在這裡我們在複習一下
開啟test1/settings.py檔案,找到語言編碼、時區的設定項,將內容改為如下:
LANGUAGE_CODE = 'zh-hans' #使用中國語言
TIME_ZONE = 'Asia/Shanghai' #使用中國上海時間
2.建立管理員
建立管理員的命令如下,按提示輸入使用者名稱、郵箱、密碼
python manage.py createsuperuser
接下來啟動伺服器
python manage.py runserver
開啟瀏覽器,在位址列中輸入如下地址後回車
http://127.0.0.1:8000/admin/
輸入前面建立的使用者名稱、密碼完成登入
登入成功後介面如下,但是並沒有圖書、英雄的管理入口,接下來進行第三步操作
3.註冊模型類
登入後臺管理頁面之後,系統預設我們沒有建立應用中定義的模型類,所以我們需要在admin.py中註冊模型類
開啟booktest/admin.py檔案,編寫如下程式碼:
from django.contrib import admin from booktest.models import BookInfo,HeroInfo admin.site.register(BookInfo) admin.site.register(HeroInfo)
到瀏覽器中重新整理頁面,可以看到模型類BookInfo和HeroInfo的管理了
點選類名稱"BookInfo"可以進入列表頁,預設只有一列
點選增加可以增加資訊
點選具體的某行可以進入該行的修改操作頁面
按照提示進行內容的修改,修改成功後進入列表頁。在修改頁點選“刪除”可以刪除一項
刪除:在列表頁勾選想要刪除的複選框,可以刪除多項
點選執行後進入確認頁面,刪除後回來列表頁面
4.自定義管理頁面
在列表頁只顯示出了BookInfo object,物件的其它屬性並沒有列出來,檢視非常不方便。 Django提供了自定義管理頁面的功能,比如列表頁要顯示哪些值。
開啟booktest/admin.py檔案,自定義類,繼承自admin.ModelAdmin類。
class BookInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'btitle', 'bpub_date'] # 表示要顯示哪些屬性
修改模型類BookInfo的註冊程式碼如下
admin.site.register(BookInfo, BookInfoAdmin)
重新整理BookInfo的列表頁,所有屬性都顯示出來了
最終booktest/admin.py檔案程式碼如下
from django.contrib import admin
from booktest.models import BookInfo,HeroInfo
class BookInfoAdmin(admin.ModelAdmin):
"""設定後臺管理頁面中圖書資訊表顯示的內容"""
list_display = ['id', 'btitle', 'bpub_date'] # 在頁面上顯示的內容為'id', 'btitle', 'bpub_date'
class HeroInfoAdmin(admin.ModelAdmin):
"""設定後臺管理頁面中英雄資訊表顯示的內容"""
list_display = ['id', 'hname','hgender','hcomment'] # 在頁面上顯示的內容為'id', 'hname','hgender','hcomment'
# 在最後寫入下兩行的程式碼,不然前面寫的自定義管理內容將無法在頁面中顯示
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)