<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

      當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > 翻譯www.djangobook.com之第六章:Django管理系統(tǒng)admin

      翻譯www.djangobook.com之第六章:Django管理系統(tǒng)admin
      2010-01-13 23:36:48  作者:  來(lái)源:
      The Django Book:第6章 Django管理系統(tǒng)admin

      Web開(kāi)發(fā)中有一些我們最討厭的部分:開(kāi)發(fā)管理界面
      開(kāi)發(fā)站點(diǎn)中公眾可以看見(jiàn)的部分一直不一樣也很有趣,但是管理用來(lái)編輯站點(diǎn)的部分一直是一樣的
      你不得不處理用戶認(rèn)證,顯示和處理表單,處理狡猾的驗(yàn)證問(wèn)題...這很無(wú)聊而且是重復(fù)性的
      Django解決這個(gè)無(wú)聊、重復(fù)的任務(wù)的方式呢?已經(jīng)幫你都做好了,只需幾行不能再少的代碼即可
      Django中最老和最強(qiáng)大的部分就是自動(dòng)管理界面,它從你的模型中取得元數(shù)據(jù)來(lái)提供強(qiáng)大的產(chǎn)品級(jí)的界面
      內(nèi)容制造者可以馬上使用它給站點(diǎn)添加內(nèi)容

      激活管理界面
      我們認(rèn)為管理界面是Django中最cool的部分,大部分Djangonauts也同意這點(diǎn)
      但是由于不是每個(gè)人都需要它,它是一個(gè)可選的部分
      有3個(gè)步驟來(lái)激活管理界面:
      1,向你的模型添加admin metadata
      并不是所有的模型都可以或者應(yīng)該被admin用戶編輯,所以你需要標(biāo)記那些需要管理界面的模型
      上一章的Book模型添加一個(gè)管理界面的方法就是:
      Java代碼 復(fù)制代碼
      1. class Book(models.Model):   
      2.     title = models.CharField(maxlength=100)   
      3.     authors = models.ManyToManyField(Author)   
      4.     publisher = models.ForeignKey(Publisher)   
      5.     publication_date = models.DateField()   
      6.   
      7.     class Admin:   
      8.         pass  

      Admin聲明標(biāo)記這個(gè)類擁有一個(gè)管理界面,在Admin之下你可以配置許多選項(xiàng)
      目前我們采用默認(rèn)值,所以我們使用pass來(lái)表示Admin類是空的
      如果你正在按這個(gè)例子寫(xiě)自己的代碼,現(xiàn)在給Publisher和Author類添加Admin聲明是個(gè)好主意
      2,安裝admin模型,簡(jiǎn)單的把"django.contrib.admin"添加到你的INSTALLED_APPS設(shè)置里
      然后運(yùn)行python manage.py syncdb來(lái)安裝admin使用的額外的表
      注意,在你第一次運(yùn)行syncdb時(shí),你很可能被問(wèn)起是否創(chuàng)建一個(gè)superuser
      如果那時(shí)你沒(méi)有創(chuàng)建superuser,你需要運(yùn)行djang/contrib/auth/bin/create_superuser.py
      來(lái)創(chuàng)建一個(gè)admin用戶,否則你就不能登錄到管理界面里去
      3,把URL模式添加到urls.py,如果仍在使用startproject創(chuàng)建的工程,admin的URL模式可能
      已經(jīng)在那兒了,但是被注釋掉了,你的URL模式應(yīng)該像這樣:
      Java代碼 復(fù)制代碼
      1. from django.conf.urls.defaults import *   
      2.   
      3. urlpatterns = patterns('',   
      4.     (r'^admin/', include('django.contrib.admin.urls')),   
      5. )  

      就這樣,現(xiàn)在運(yùn)行python manage.py runserver來(lái)啟動(dòng)服務(wù)器,你將看到如下信息:
      Validating models...
      0 errors found.

      Django version 0.96-pre, using settings 'mysite.settings'
      Development server is running at http://127.0.0.1:8000/
      Quit the server with CONTROL-C.
      現(xiàn)在你可以訪問(wèn)http://127.0.0.1:8000/admin/,登錄,然后隨便玩玩

      使用管理界面
      管理頁(yè)面設(shè)計(jì)用來(lái)給非技術(shù)人員使用,所有非常簡(jiǎn)單,但有幾個(gè)地方需要注意
      首先你將看到登錄界面,可以用你第一次運(yùn)行syncdb時(shí)創(chuàng)建的用戶名和密碼來(lái)登錄

      登錄之后你將看到你可以管理用戶,組和權(quán)限
      每個(gè)聲明了Admin的對(duì)象將顯示在首頁(yè)上,添加和編輯這兩個(gè)鏈接將導(dǎo)向改動(dòng)列表和編輯表單的頁(yè)面

      改動(dòng)列表是系統(tǒng)中對(duì)象列表的首頁(yè)
      [img]http://media.djangobook.com/content/chapter06/changelist.png[/imag]
      有很多選項(xiàng)來(lái)控制哪些域顯示在這個(gè)列表中以及其它特性的外觀,如日期格式,搜索域和過(guò)濾接口
      下面會(huì)有對(duì)這些特性更多的解釋
      編輯表單用來(lái)編輯已有的對(duì)象和創(chuàng)建新對(duì)象
      你的模型的每個(gè)域?qū)@示在這里,不同的域類型有不同的顯示界面,如日期和時(shí)間域是日歷控件
      而外鍵使用的是選擇框等等

      你會(huì)注意到admin也為你處理輸入驗(yàn)證,試著留一個(gè)需要的域不填,或者在一個(gè)時(shí)間域里輸入不合法的時(shí)間,你會(huì)看到當(dāng)你保存時(shí)出現(xiàn)錯(cuò)誤顯示

      驗(yàn)證是第7章講到的一個(gè)強(qiáng)大的驗(yàn)證框架來(lái)做的
      當(dāng)編輯一個(gè)對(duì)象時(shí)你會(huì)在右上方看到一個(gè)歷史鏈接,admin上的每一個(gè)改動(dòng)都會(huì)被記入日志
      你可以點(diǎn)擊歷史按鈕來(lái)查看日志

      admin里的刪除是級(jí)聯(lián)的,當(dāng)你刪除一個(gè)對(duì)象時(shí),admin會(huì)讓你確認(rèn)刪除動(dòng)作以避免代價(jià)昂貴的錯(cuò)誤
      確認(rèn)頁(yè)面也會(huì)顯示所有將被刪除的相關(guān)的對(duì)象


      用戶,組,權(quán)限
      既然你用superuser登錄,你擁有創(chuàng)建,編輯和刪除任何對(duì)象的權(quán)限
      盡管如此,admin也有一個(gè)用戶權(quán)限系統(tǒng),你可以使用它來(lái)約束其它用戶的訪問(wèn)權(quán)限
      你可以像編輯其它對(duì)象一樣來(lái)編輯這些用戶和權(quán)限,用戶和組模型的鏈接和其它你定義的對(duì)象一樣顯示在admin首頁(yè)
      用戶對(duì)象有標(biāo)準(zhǔn)的用戶名,密碼,郵件和真實(shí)姓名域,以及一些定義用戶在admin的權(quán)限的域
      首先,這里有一些flags:
      1,“is active”控制用戶是否是活動(dòng)的,如果這項(xiàng)flag為off,這個(gè)用戶將不能訪問(wèn)任何需要登錄的URL
      2,“is staff”控制用戶是否允許登錄admin,由于第12章講到這個(gè)用戶系統(tǒng)同樣被用來(lái)控制對(duì)public頁(yè)面的
      訪問(wèn)權(quán)限,這個(gè)flag對(duì)于public用戶和管理員的含義不同
      3,“is superuser”給予用戶在admin的任何訪問(wèn)權(quán)限,普通的權(quán)限將被忽略
      對(duì)于正常的admin用戶,即活動(dòng)的而非superuser的staff用戶,他們的訪問(wèn)權(quán)限取決于一些被分配的權(quán)限
      每個(gè)可以在admin編輯的對(duì)象擁有3個(gè)權(quán)限:創(chuàng)建權(quán)限,編輯權(quán)限和刪除權(quán)限,給一個(gè)用戶賦予權(quán)限將
      允許用戶訪問(wèn)這些權(quán)限所描述的頁(yè)面
      注意,對(duì)編輯用戶和編輯權(quán)限的訪問(wèn)同樣在這個(gè)權(quán)限系統(tǒng)控制,如果你給一個(gè)用戶編輯用戶的權(quán)限,
      她將可以編輯她自己的權(quán)限,這可能是你的初衷!
      你也可以給用戶分配組,一個(gè)組就是一些權(quán)限,組的權(quán)限將分配給組的成員
      給用戶賦予一套數(shù)量很多的權(quán)限時(shí)組就很有用了

      定制管理界面
      有許多方式來(lái)定制admin的界面外觀和行為,我們僅僅看其中跟我們的“Book”模型相關(guān)的一些
      第12章詳述了定制admin界面
      現(xiàn)在books的改動(dòng)列表僅僅顯示模型的string展現(xiàn),即__str__
      這對(duì)于少量的books可以很好的工作,但是如果我們有成千上萬(wàn)的books,這將很難在干草推里找到唯一的那根針
      盡管如此,我們可以給這個(gè)界面很方便的添加一些顯示,搜索和過(guò)濾方法,編輯Admin定義:
      Java代碼 復(fù)制代碼
      1. class Book(models.Model):   
      2.     title = models.CharField(maxlength=100)   
      3.     authors = models.ManyToManyField(Author)   
      4.     publisher = models.ForeignKey(Publisher)   
      5.     publication_date = models.DateField()   
      6.   
      7.     class Admin:   
      8.         list_display   = ('title''publisher''publication_date')   
      9.         list_filter    = ('publisher''publication_date')   
      10.         ordering       = ('-publication_date',)   
      11.         search_fields  = ('title',)  

      這4行代碼神奇的改變了我們的列表界面:

      這些定義中的每一行都告訴admin來(lái)構(gòu)建一個(gè)不同的界面:
      1,ordering選項(xiàng)控制了對(duì)象在admin里面顯示的順序,它是對(duì)結(jié)果排序的域的列表
      前面加一個(gè)減號(hào)將排反序,所以例子中我們對(duì)publication_date排序,最近的書(shū)將顯示在最前面
      2,list_display選項(xiàng)控制了在改動(dòng)列表里哪些列將顯示,默認(rèn)情況下將只顯示對(duì)象的string展示
      這一個(gè)單獨(dú)的列,這里我們顯示title,publisher和publication_date
      3,list_filter選項(xiàng)將在列表的右上方創(chuàng)建過(guò)濾器條,我們?cè)试S通過(guò)date和publisher來(lái)過(guò)濾
      你可以讓admin過(guò)濾任何域,但是外鍵或者有chioces屬性集的域工作的更好
      4,最后search_fields選項(xiàng)創(chuàng)建一個(gè)允許文本搜索的域,這里允許通過(guò)title域搜索
      通過(guò)這里以及第12章描述的選項(xiàng)你可以只用幾行代碼構(gòu)建一個(gè)強(qiáng)大的具備產(chǎn)品能力的編輯數(shù)據(jù)界面


      定制管理系統(tǒng)的外觀
      顯然在每個(gè)管理頁(yè)面的頂端擁有一個(gè)“Django 管理系統(tǒng)”是很荒謬的,它只是一個(gè)占位文本
      盡管如此,使用Django的模板系統(tǒng)可以很容易改變這點(diǎn),Django的admin是Django自己支持的
      它的界面使用Django自己的模板系統(tǒng)
      打開(kāi)mysite/settings.py看看TEMPLATE_DIRS設(shè)置,用來(lái)載入Django模板時(shí)檢查文件系統(tǒng)目錄
      它是一個(gè)搜索的路徑,默認(rèn)情況下它是空的,下面我們加點(diǎn)東西來(lái)告訴Django我們的模板在哪:
      Java代碼 復(fù)制代碼
      1. TEMPLATE_IDRS = (   
      2.     "/home/mytemplates", # Change this to your own directory.   
      3. )  

      注意這里包括了最后的逗號(hào),Python使用它來(lái)區(qū)分單元素元組和括號(hào)括起來(lái)的表達(dá)式
      現(xiàn)在把a(bǔ)dmin/base_site.html從Django的admin模板目錄(django/contrib/admin/templates)復(fù)制到
      TEMPLATE_DIRS下的admin子目錄下,admin是新建的子目錄
      然后編輯admin/base_site.html,用你自己的站點(diǎn)的名字替換Django文本
      注意任何Django的默認(rèn)admin模板都可以覆蓋,只需像base_site.html一樣覆蓋模板
      即從默認(rèn)目錄復(fù)制你的自定義目錄然后改變這個(gè)副本
      敏銳的讀者可能想知道,如果TEMPLATE_DIRS默認(rèn)是空的,Django是怎樣找到默認(rèn)的admin模板的?
      答案是,默認(rèn)情況下Django自動(dòng)在每個(gè)app包下搜尋templates/子目錄下的模板
      看看第10章的“模板載入器”你將了解關(guān)于它的更多信息

      定制管理系統(tǒng)首頁(yè)
      同樣需要注意的是,你可能想定制Django的admin首頁(yè)外觀
      默認(rèn)時(shí)它將根據(jù)INSTALLED_APPS并按程序名排序顯示所有的apps
      盡管如此,你可能想改變這個(gè)顯示順序來(lái)使你更容易找到你要的apps
      畢竟首頁(yè)時(shí)admin最重要的頁(yè)面,它應(yīng)該很容易使用才行
      需要定制的模板時(shí)admin/index.html,記得把a(bǔ)dmin/base_site.html復(fù)制到你的自定義模板目錄
      編輯這個(gè)文件,你將看到它使用模板標(biāo)簽{% get_admin_app_list as app_list %}
      這就是得到所有安裝的Django app的魔法所在
      你可以用你認(rèn)為最好的方法硬編碼對(duì)象專有的admin頁(yè)面來(lái)替換這個(gè)標(biāo)簽
      如果你不太明白硬編碼鏈接,可以參考第10章的實(shí)現(xiàn)你自己的模板標(biāo)簽的細(xì)節(jié)
      Django在這個(gè)地方提供另一個(gè)捷徑,運(yùn)行python mange.py adminindex <app>來(lái)在admin首頁(yè)模板
      包含一些模板代碼,開(kāi)始時(shí)這十分有用
      參考第12章關(guān)于定制Django的admin站點(diǎn)外觀的細(xì)節(jié)

      何時(shí)使用和為什么使用管理界面
      我們認(rèn)為Django的admin界面很神奇,事實(shí)上,我們稱它為Django的一個(gè)“殺手級(jí)特性”
      盡管如此,我們經(jīng)常被問(wèn)到admin的“use cases”這個(gè)問(wèn)題,即什么時(shí)候我們使用它,以及為什么使用它?
      這幾年我們討論了許多使用admin界面可能有幫助的模式
      顯然它對(duì)于編輯數(shù)據(jù)十分有用,如果你有一些數(shù)據(jù)輸入的任務(wù),admin就是你想要的
      我們也發(fā)現(xiàn)admin在下面幾種情況下十分有用:
      1,檢查數(shù)據(jù)模型,當(dāng)我們定義一個(gè)新模型后第一件事就是在admin里面激活它并且輸入一些模擬數(shù)據(jù)
      發(fā)現(xiàn)一些數(shù)據(jù)模型錯(cuò)誤是很常見(jiàn)的,有一個(gè)圖形界面來(lái)揭露這些錯(cuò)誤會(huì)很有用
      2,管理需要的數(shù)據(jù),例如對(duì)于chicagocrime.org有自動(dòng)的數(shù)據(jù)數(shù)據(jù)產(chǎn)生源,但是當(dāng)數(shù)據(jù)源出現(xiàn)問(wèn)題,
      我們可以通過(guò)admin很輕松的編輯數(shù)據(jù)

      安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        色一情一乱一乱一区91Av | 亚洲国产日韩在线人高清 | 亚洲国产精品第三页 | 亚洲国产综合激情视频 | 正在播放国产精品久久久久 | 亚洲国产精品脚交在线 |