Python的Django框架下管理站點(diǎn)的基本方法
對(duì)于某一類網(wǎng)站, 管理界面 是基礎(chǔ)設(shè)施中非常重要的一部分。 這是以網(wǎng)頁(yè)和有限的可信任管理者為基礎(chǔ)的界面,它可以讓你添加,編輯和刪除網(wǎng)站內(nèi)容。 一些常見(jiàn)的例子: 你可以用這個(gè)界面發(fā)布博客,后臺(tái)的網(wǎng)站管理者用它來(lái)潤(rùn)色讀者提交的內(nèi)容,你的客戶用你給他們建立的界面工具更新新聞并發(fā)布在網(wǎng)站上,這些都是使用管理界面的例子。
但是管理界面有一問(wèn)題: 創(chuàng)建它太繁瑣。 當(dāng)你開(kāi)發(fā)對(duì)公眾的功能時(shí),網(wǎng)頁(yè)開(kāi)發(fā)是有趣的,但是創(chuàng)建管理界面通常是千篇一律的。 你必須認(rèn)證用戶,顯示并管理表格,驗(yàn)證輸入的有效性諸如此類。 這很繁瑣而且是重復(fù)勞動(dòng)。
Django 在對(duì)這些繁瑣和重復(fù)的工作進(jìn)行了哪些改進(jìn)? 它用不能再少的代碼為你做了所有的一切。 Django 中創(chuàng)建管理界面已經(jīng)不是問(wèn)題。
這一章是關(guān)于 Django 的自動(dòng)管理界面。 這個(gè)特性是這樣起作用的: 它讀取你模式中的元數(shù)據(jù),然后提供給你一個(gè)強(qiáng)大而且可以使用的界面,網(wǎng)站管理者可以用它立即工作。
請(qǐng)注意我們建議你讀這章,即使你不打算用admin。因?yàn)槲覀儗⒔榻B一些概念,這些概念可以應(yīng)用到Django的所有方面,而不僅僅是admin
django.contrib 包
Django自動(dòng)管理工具是django.contrib的一部分。django.contrib是一套龐大的功能集,它是Django基本代碼的組成部分,Django框架就是由眾多包含附加組件(add-on)的基本代碼構(gòu)成的。 你可以把django.contrib看作是可選的Python標(biāo)準(zhǔn)庫(kù)或普遍模式的實(shí)際實(shí)現(xiàn)。 它們與Django捆綁在一起,這樣你在開(kāi)發(fā)中就不用“重復(fù)發(fā)明輪子”了。
管理工具是本書講述django.contrib的第一個(gè)部分。從技術(shù)層面上講,它被稱作django.contrib.admin。django.contrib中其它可用的特性,如用戶鑒別系統(tǒng)(django.contrib.auth)、支持匿名會(huì)話(django.contrib.sessioins)以及用戶評(píng)注系統(tǒng)(django.contrib.comments)。這些,我們將在第十六章詳細(xì)討論。在成為一個(gè)Django專家以前,你將會(huì)知道更多django.contrib的特性。 目前,你只需要知道Django自帶很多優(yōu)秀的附加組件,它們都存在于django.contrib包里。
激活管理界面
Django管理站點(diǎn)完全是可選擇的,因?yàn)閮H僅某些特殊類型的站點(diǎn)才需要這些功能。 這意味著你需要在你的項(xiàng)目中花費(fèi)幾個(gè)步驟去激活它。
第一步,對(duì)你的settings文件做如下這些改變:
將'django.contrib.admin'加入setting的INSTALLED_APPS配置中 (INSTALLED_APPS中的配置順序是沒(méi)有關(guān)系的, 但是我們喜歡保持一定順序以方便人來(lái)閱讀)
保證INSTALLED_APPS中包含'django.contrib.auth','django.contrib.contenttypes'和'django.contrib.sessions',Django的管理工具需要這3個(gè)包。 (如果你跟隨本文制作mysite項(xiàng)目的話,那么請(qǐng)注意我們?cè)诘谖逭碌臅r(shí)候把這三項(xiàng)INSTALLED_APPS條目注釋了?,F(xiàn)在,請(qǐng)把注釋取消。)
確保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware' 、'django.contrib.sessions.middleware.SessionMiddleware' 和'django.contrib.auth.middleware.AuthenticationMiddleware' 。(再次提醒,如果有跟著做mysite的話,請(qǐng)把在第五章做的注釋取消。)
運(yùn)行 python manage.py syncdb 。這一步將生成管理界面使用的額外數(shù)據(jù)庫(kù)表。 當(dāng)你把'django.contrib.auth'加進(jìn)INSTALLED_APPS后,第一次運(yùn)行syncdb命令時(shí), 系統(tǒng)會(huì)請(qǐng)你創(chuàng)建一個(gè)超級(jí)用戶。 如果你不這么作,你需要運(yùn)行python manage.py createsuperuser來(lái)另外創(chuàng)建一個(gè)admin的用戶帳號(hào),否則你將不能登入admin (提醒一句: 只有當(dāng)INSTALLED_APPS包含'django.contrib.auth'時(shí),python manage.py createsuperuser這個(gè)命令才可用.)
第三,將admin訪問(wèn)配置在URLconf(記住,在urls.py中). 默認(rèn)情況下,命令django-admin.py startproject生成的文件urls.py是將Django admin的路徑注釋掉的,你所要做的就是取消注釋。 請(qǐng)注意,以下內(nèi)容是必須確保存在的:
# Include these import statements... from django.contrib import admin admin.autodiscover() # And include this URLpattern... urlpatterns = patterns('', # ... (r'^admin/', include(admin.site.urls)), # ... )
當(dāng)這一切都配置好后,現(xiàn)在你將發(fā)現(xiàn)Django管理工具可以運(yùn)行了。 啟動(dòng)開(kāi)發(fā)服務(wù)器(如前:`` python manage.py runserver`` ),然后在瀏覽器中訪問(wèn):http://127.0.0.1:8000/admin/
將你的Models加入到Admin管理中
有一個(gè)關(guān)鍵步驟我們還沒(méi)做。 讓我們將自己的模塊加入管理工具中,這樣我們就能夠通過(guò)這個(gè)漂亮的界面添加、修改和刪除數(shù)據(jù)庫(kù)中的對(duì)象了。
在其中,我們定義了三個(gè)模塊: Publisher 、 Author 和 Book 。
在`` books`` 目錄下(`` mysite/books`` ),創(chuàng)建一個(gè)文件:`` admin.py`` ,然后輸入以下代碼:
from django.contrib import admin from mysite.books.models import Publisher, Author, Book admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book)
這些代碼通知管理工具為這些模塊逐一提供界面。
完成后,打開(kāi)頁(yè)面 `` http://127.0.0.1:8000/admin/`` ,你會(huì)看到一個(gè)Books區(qū)域,其中包含Authors、Books和Publishers。 (你可能需要先停止,然后再啟動(dòng)服務(wù)(`` runserver`` ),才能使其生效。)
現(xiàn)在你擁有一個(gè)功能完整的管理界面來(lái)管理這三個(gè)模塊了。 很簡(jiǎn)單吧!
花點(diǎn)時(shí)間添加和修改記錄,以填充數(shù)據(jù)庫(kù)。 如果你跟著第五章的例子一起創(chuàng)建Publisher對(duì)象的話(并且沒(méi)有刪除),你會(huì)在列表中看到那些記錄。
這里需要提到的一個(gè)特性是,管理工具處理外鍵和多對(duì)多關(guān)系(這兩種關(guān)系可以在`` Book`` 模塊中找到)的方法。 作為提醒,這里有個(gè)`` Book`` 模塊的例子:
class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() def __unicode__(self): return self.title
在Add book頁(yè)面中(`` http://127.0.0.1:8000/admin/books/book/add/`` ),`` 外鍵`` publisher用一個(gè)選擇框顯示,`` 多對(duì)多`` 字段author用一個(gè)多選框顯示。 點(diǎn)擊兩個(gè)字段后面的綠色加號(hào),可以讓你添加相關(guān)的記錄。 舉個(gè)例子,如果你點(diǎn)擊Publisher后面的加號(hào),你將會(huì)得到一個(gè)彈出窗口來(lái)添加一個(gè)publisher。 當(dāng)你在那個(gè)窗口中成功創(chuàng)建了一個(gè)publisher后,Add book表單會(huì)自動(dòng)把它更新到字段上去 花巧.
相關(guān)文章
python?使用ctypes調(diào)用C/C++?dll詳情
這篇文章主要介紹了python?使用ctypes調(diào)用C/C++?dll詳情,文章首先通過(guò)導(dǎo)入ctypes模塊,加載C/C++?dll到python進(jìn)程空間展開(kāi)主題相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-04-04基于Python實(shí)現(xiàn)通過(guò)微信搜索功能查看誰(shuí)把你刪除了
這篇文章主要介紹了基于Python實(shí)現(xiàn)微信搜索查看誰(shuí)把你刪除了的相關(guān)資料,需要的朋友可以參考下2016-01-01pycharm下載包的時(shí)候出現(xiàn) no information available的解決
這篇文章主要介紹了pycharm下載包的時(shí)候出現(xiàn) no information available的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試的方法步驟
這篇文章主要介紹了Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11使用python切片實(shí)現(xiàn)二維數(shù)組復(fù)制示例
今天小編就為大家分享一篇使用python切片實(shí)現(xiàn)二維數(shù)組復(fù)制示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行
Docker是一個(gè)開(kāi)源項(xiàng)目,為開(kāi)發(fā)人員和系統(tǒng)管理員提供了一個(gè)開(kāi)放平臺(tái),可以將應(yīng)用程序構(gòu)建、打包為一個(gè)輕量級(jí)容器,并在任何地方運(yùn)行,這篇文章主要給大家介紹了關(guān)于將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行的相關(guān)資料,需要的朋友可以參考下2023-12-12python字典嵌套字典的情況下找到某個(gè)key的value詳解
這篇文章主要介紹了python字典嵌套字典的情況下找到某個(gè)key的value詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07