因爲這個是個投票系統、有客戶頁面就應該有供管理員使用的後臺管理系統。
而Django框架提供了一個基於項目model創建的一個後臺管理站點admin。這個界面只給站點管理員使用,並不對大衆開放。 雖然不是很美觀、但是卻是現成的、且功能可定製。
1. 創建admin用戶
$ python manage.py createsuperuser
根據系統提示輸入用戶名、郵箱、密碼。
2. 進入admin後臺管理系統
服務器啓動後,在瀏覽器訪問http://127.0.0.1:8000/admin/
。理論上你就能看到admin的登陸界面了:
但我並不幸運、、、
首先瀏覽器並沒有顯示登陸頁面、而是隻展示了一行提示:
“A server error occurred. Please contact the administrator.”
看後後臺有多個報錯、分爲兩種:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
for url_pattern in reversed(self.url_patterns):
TypeError: 'set' object is not reversible
哎、、、、、欲語淚先流
一個一個解決吧、第一個報錯是編碼的問題,貌似是django的bug。
上網查了查、這個報錯影響到瀏覽器端無法顯示報錯信息。
那先把這個修了吧
根據提示找到 python安裝路徑\Lib\site-packages\django\views\debug.py ,打開後,修改約在 332 行處,將:
with Path(CURRENT_DIR, 'templates', 'technical_500.html').open() as fh:
修改爲
with Path(CURRENT_DIR, 'templates', 'technical_500.html').open(encoding='utf-8') as fh:
重啓後就好了。
這下報錯可以在瀏覽器中展示了。
然後就看到了第二個錯的詳細信息、、、、
報錯說urlpatterns不可逆轉。看了下項目創建的urls.py
urlpatterns = {
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
}
這個urlpatterns是字典、字典無序、所以不可逆轉。。。。。
這尼瑪不是自動創建的嗎、、、
按照度娘上的說法、在應用下的urls.py和app下的urls.py都應該改爲urlpatterns= [ ] 即可。
終於看到登錄頁面了、、、
迴歸正題、開始登錄、成功啦~~~~
然後把後臺管理界面改個路由地址,隱藏一下、無敵
urlpatterns = [
path('polls/', include('polls.urls')),
path('34thssk/', admin.site.urls),
]
現在進來的後臺管理系統中只有兩個部分可以進行操作,groups和users。
它們是django.contrib.auth
模塊提供的身份認證框架。
3. 後臺管理系統中註冊投票應用
先在admin中進行註冊,告訴admin站點,請將polls的模型加入站點內,接受站點的管理。
打開polls/admin.py
文件,加入下面的內容:
from django.contrib import admin
from .models import Question
admin.site.register(Question)
4. 後臺管理系統功能
點擊“Questions”,進入questions的修改列表頁面。這個頁面會顯示所有的數據庫內的questions對象,你可以在這裏對它們進行修改。看到下面的“What’s up?”
了麼?它就是我們先前創建的一個question對象,並且通過__str__
方法的幫助,顯示了較爲直觀的信息。
下面,點擊What’s up?
進入編輯界面:
這裏需要注意的是:
- 頁面中的表單是由Question模型自動生成的。
- 不同的模型字段類型(DateTimeField, CharField)會表現爲不同的
HTML input
框類型。 - 每一個
DateTimeField
都會自動生成一個可點擊鏈接。日期是Today,並有一個日曆彈出框;時間是Now,並有一個通用的時間輸入列表框。
在頁面的底部,則是一些可選項按鈕:
delete
:彈出一個刪除確認頁面save and add another
:保存當前修改,並加載一個新的空白的當前類型對象的表單。save and continue editing
:保存當前修改,並重新加載該對象的編輯頁面。save
:保存修改,返回當前對象類型的列表頁面。
如果Date published
字段的值和你在前面教程創建它的時候不一致,可能是你沒有正確的配置TIME_ZONE
,在國內,通常是8個小時的時間差別。修改TIME_ZONE配置並重新加載頁面,就能顯示正確的時間了。
在頁面的右上角,點擊History
按鈕,你會看到你對當前對象的所有修改操作都在這裏有記錄,包括修改時間和操作人員,如下圖所示: