国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Django1.7學習(三)

2019-11-14 17:35:51
字體:
來源:轉載
供稿:網友

簡單介紹:

生成添加、修改和刪除內容的管理性網站是個單調乏味的工作。 出于這個原因,Django 根據模型完全自動化創建管理界面。

Django 是在新聞編輯室環境下編寫的,“內容發表者”和“公共”網站之間有 非常明顯的界線。網站管理員使用這個系統來添加新聞、事件、體育成績等等,而這些內容會在公共網站上顯示出來。Django 解決了為網站管理員創建統一 的管理界面用以編輯內容的問題。

管理界面不是讓網站訪問者使用的。它是為網站管理員準備的。

8.創建一個管理帳號

首先,我們必須創建一個能夠登錄管理頁面的用戶,運行如下命令:

python manage.py createsuperuser

接著按要求輸入期望的用戶名然后按下 Enter 鍵,這里以 admin 為例

Username : admin

接下來將提示輸入期望的郵箱地址:

Email address: admin@example.com

最后一步為輸入密碼,照慣例輸入兩次以確認密碼

PassWord: **********Password (again): *********Superuser created successfully.

9.啟動開發服務器并登錄管理頁面

Django 管理界面默認是激活的,現在就啟動開發服務器并一起開始探索吧

如前面提到的用以下命令來啟用開發服務器:

python manage.py runserver

打開網頁瀏覽器訪問本地域名的/admin/目錄,如默認的 http://127.0.0.1:8000/admin/,然后就可以看到如下登錄界面

由于翻譯功能默認開啟,前面在settings.py 中設置了語言為中文,因此此處顯示的是中文界面,默認為英文界面

現在可以使用前面所創建的超級用戶登錄了,正常情況下應該看到如下頁面

這里將看到一些可編輯的內容,包括 組(groups)和用戶(users)。這些都是 Django 默認情況下自帶的核心框架。

10.使 poll 應用的數據在管理網站中可編輯

細心觀察就可以發現,我們創建的 app 并沒有出現在該管理頁面中,怎樣讓 app 出現在管理界面呢?只需要做一件事:向admin注冊Question對象。

打開 polls/admin.py 文件,然后修改成以下內容即可

from django.contrib import adminfrom polls.models import Questionadmin.site.register(Question)

重新打開管理頁面你就會發現我們的app出現在管理頁面中了

11.摸索管理功能

 點擊“Questions”,現在我們所處的位置為 questions 的更改列表頁,這個頁面將顯示出所有存在于數據庫中的 question 并讓我們進行選擇修改,這里可以看到之前創建的question:"What's up?"

點擊"what's up?"進行編輯

  • 表單是根據Question model 自動生成的
  • 不同的 model 的字段類型(DateTimeField,CharField)會對應相應的HTML輸入控件,Django管理知道如何表示每一種類型的字段
  • 每個DateTime 都會有javascript 快捷方式,日期有一個 “今天” 快捷方式和彈出式日歷,而時間有個 “現在” 快捷方式和一個列出了常用時間選項的彈出式窗口。
  • 下面還有四個見名知意的功能按鈕,刪除、保存……

如果Date published 與創建時的時間不同,說明在設置 TIME_ZONE值的時候沒有設置正確,修改后重啟。

 點擊快捷方式“今天”和“現在”來修改“Date published”,修改完后選擇“保存并繼續編輯”,然后點擊右上方的“歷史”,此時可以看到管理頁面列出了所有所有的修改記錄,包括時間和執行修改的用戶的用戶名。

12.自定義管理表單

通過admin.site.register(Question) 注冊了 Question 這個model,Django 就會自動生成一個默認的表單。但是通常情況下,我們都會想要自定義管理表單的外觀和功能。這就需要我們在注冊對象的同時進行相應的配置。

接下來就看看怎樣在編輯表單上給字段重新排序。將 admin.site.register(Question) 這行替換成如下:

from django.contrib import adminfrom polls.models import Questionclass QuestionAdmin(admin.ModelAdmin):    fields = ['pub_date', 'question_text']admin.site.register(Question, QuestionAdmin)

我們需要遵循如下模式——創建一個model 管理對象,然后最為第二個參數傳入 admin.site.register() ——任何需要做管理界面的配置的時候都要遵循

上面的修改使得 “發表時間”出現在了“Question”上面

 僅有兩個字段可能沒法留下太深的印象,但是對于有多個字段的管理表單時選擇一個直觀 的排序方式是很重要的實用細節。說起多個字段的表單,我們可能會想要將其分組打包:

from django.contrib import adminfrom polls.models import Questionclass QuestionAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question_text']}),        ('Date information', {'fields': ['pub_date']}),    ]admin.site.register(Question, QuestionAdmin)

分組中每個元祖的第一個元素作為該分組的標題,如下便是修改后的表單的樣子:

除此之外,我們還可以為每一個分組指定HTML樣式類。Django 提供了一個“collapse”類用于顯示初始狀態為收縮的分組,當有一個包含一些不常用的長窗體時是非常有用的。

from django.contrib import adminfrom polls.models import Questionclass QuestionAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question_text']}),        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),    ]

13.添加關聯對象

現在我們已經擁有了Question的管理頁面了,但是一個 Question 有多個的 Choice,而管理頁面卻沒有顯示出來?

這里有兩種方法解決這個問題:第一種是像前面注冊Question那樣注冊Choice,簡單的添加幾行代碼即可:

from django.contrib import adminfrom polls.models import Choice, Question# ...admin.site.register(Choice)

現在 “Choice” 就是Django 管理頁面上一個可用的選項了,“添加 Choice”表單如下:

在該表單中,“Question” 字段是一個包含了數據庫中所有question的下拉選擇框,Django 知道應該將外鍵以<select>框顯示。當然了,現在還只有一個question 存在。

 同時注意到“Questin”旁邊的“+”,每一個擁有外鍵的對象關聯到其他對象時都會產生這個鏈接。當點擊“+”時,將彈出一個添加“添加Question”的窗口。如果添加了Quesiton并保存,Django將會把它保存到數據庫中并且動態地添加到現在正在查看的“添加 Choice”表單中的已選項。

注意:通過上面的方式添加choice是一種非常低效的做法,如果在一開始創建Question對象時就添加一批Choice則會顯得更高效,接下來就嘗試著這么干。

移除Choice對register()方法的調用,接著將Question的注冊代碼改成如下:

from django.contrib import adminfrom polls.models import Choice, Questionclass ChoiceInline(admin.StackedInline):    model = Choice    extra = 3class QuestionAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question_text']}),        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),    ]    inlines = [ChoiceInline]admin.site.register(Question, QuestionAdmin)

這將告訴Django:Choice對象將在Question管理界面中被編輯。默認情況下,將提供三個Choice的字段空間。重新載入“添加 question”頁面看看效果:

在三個choice最下面有一個“+添加另一個Choice”按鈕,當需要添加更多時可以使用,而當想刪除choice插槽時可以點擊相應插槽右上方的小'x'。注意:三個默認的插槽無法刪除。

還有個小問題。為了顯示所有關聯 Choice 對象的字段需要占用大量的 屏幕空間。為此,Django 提供了一個以表格方式顯示內嵌有關聯對象的方式; 只需要將 ChoiceInline 聲明改為如下所示即可:

class ChoiceInline(admin.TabularInline):    #...

使用了 TabularInline 后(而不是 StackedInline) ,基于表的格式下相關 對象被顯示的更緊湊了:

需要注意的是有個額外的 “Delete?” 列允許保存時移除已保存過的行。

14.自定義管理頁面的管理列表

默認情況下,Django顯示出的是每個對象經str()處理過的結果。但有些時候如果能顯示每個字段的值則會更好。做到這一點需要用list_display這個管理選項,這是一個包含要顯示的字段名的元組,將會以列的形式在該對象的修改列表頁上顯示出來。

class QuestionAdmin(admin.ModelAdmin):    # ...    list_display = ('question_text', 'pub_date','was_published_recently')

現在Question的更改列表頁就像如下所示:

除了 was_published_recently 這一列,因為不支持根據方法輸出的內容的排序外,可以點擊列的標題對這些值進行排序。默認情況下,列的標題為方法名,下劃線會被自動替換成空格,并且每一行以字符串形式進行輸出。

當然,還可以通過給該方法(polls/models.py)添加一些屬性來改善顯示效果,如以下所示:

class Question(models.Model):    # ...    def was_published_recently(self):        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)    was_published_recently.admin_order_field = 'pub_date'    was_published_recently.boolean = True    was_published_recently.short_description = 'Published recently?'

再次編輯 polls/admin.py 并添加一個改進Question的修改列表的功能(篩選),在QuestionAdmin中添加以下內容:

list_filter = ['pub_date']

這就增加了一個 “篩選” 的側邊欄,可以通過 pub_date 字段的值來篩選 change list 顯示的內容:

顯示篩選的類型取決于需要篩選的字段類型。 因為 pub_date 是一個 DateTimeField 的實例,Django 提供對應的篩選選項:”任意日期,” “今天,” “過去7天,” “本月,” “今年.”

接下來再添加個搜索功能:

search_fields = ['question_text']

可以看到在修改i列表頁上方增加了一個搜索框,雖然可以使用任意數量的字段進行搜索,但是因為它在后臺用 LIKE 查詢,為了保持數據庫的性能請合理使用。當然除此之外還有其他功能可以添加,不一一列舉。

15.自定義管理界面外觀

顯然,在每一個管理頁面頂部都有著"Django administration"是很不科學的,盡管只是個占位符號。

不過使用 Django 的模板系統是很容易改變的。Django 管理網站有 Django 框架自身的功能,可以通過 Django 自身的模板系統來修改界面。

自定義項目模版

在項目目錄下創建一個templates文件夾,模版可以放在文件系統的任何位置,Django可以以任何用戶身份在你的服務器上運行,因此均可以訪問到。不過,最好養成將模版文件保存在項目中的好習慣。

打開配置文件(mysite/settings.py)并添加一個 TEMPLATE_DIRS 設置:

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

現在創建一個帶templates文件夾的admin文件夾,然后從 Django 源代碼中自帶的默認 Django 管理模板的目錄 (django/contrib/admin/templates) 下復制admin/base_site.html 模板到該文件夾。

Django 的源代碼在哪里?如果找不到的可以通過如下腳本找到

import syssys.path = sys.path[1:]import djangoPRint(django.__path__)

 接著,只要編輯該文件并將{{ site_header|default:_('Django administration') }}替換成自己認為適合的名字就行了,例如:{{ _('Polls administration') }}。此處只是個示范,在真正的項目中,你將可能用 django.contrib.admin.AdminSite.site_header 屬性來更輕易地進行自己獨特的自定義。

該模版包含了大量的文字,比如:{% block branding %} 和 {{ title }}。{% 和 {{ 標記是 Django 模板語言的一部分。當 Django 呈現 admin/base_site.html 時,根據模板語言生成最終的 HTML 頁面。

注意 :Django 默認的管理網站中的任何模板都是可覆蓋的。 要覆蓋一個模板,只需要像剛才處理 base_site.html 一樣 ——從默認的目錄下復制到你的自定義目錄下,并修改它。

自定義應用模版

如果 TEMPLATE_DIRS 默認的情況下是空值, 那 Django 是如何找到默認的管理網站的模板的? 答案就是在默認情況下, Django 會自動在每一個應用的包內查找 templates/ 目錄,作為備用使用。 (不要忘記django.contrib.admin 是一個應用)。

我們的 poll 應用不是很復雜并不需要自定義管理模板。但是如果它變得更復雜 而且為了一些功能需要修改 Django 的標準管理模板,修改應用模板將是更 明智的選擇,而不是修改項目模板。通過這種方式,你可以在任何新項目包括 polls 應用中自定義模板并且放心會找到需要的自定義的模板的。

自定義管理首頁

默認情況下,首頁會顯示在 INSTALLED_APPS 中所有注冊了管理功能的應用, 并按字母排序。你可能想在頁面布局上做大修改。總之,首頁可能是管理網站中最重要的頁面, 因此它應該很容易使用。

你需要自定義的模板是 admin/index.html 。 (同先前處理 admin/base_site.html 一樣 – 從默認目錄下復制到你自定義的模板目錄下。) 編輯這個文件,你將看到一個名為 app_list 的模板變量。這個變量包含了每一個 已安裝的 Django 應用。你可以通過你認為最好的方法硬編碼鏈接到特定對象的管理頁面,而不是使用默認模板。

參考:https://docs.djangoproject.com/en/1.7/intro/tutorial02/

未完待續。。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乳山市| 大丰市| 盘山县| 广平县| 东至县| 嘉峪关市| 德格县| 巴彦淖尔市| 延长县| 松原市| 杭锦后旗| 荥阳市| 江陵县| 通化市| 嘉义县| 德阳市| 武夷山市| 安徽省| 遂宁市| 澳门| 修水县| 庆安县| 澎湖县| 卓资县| 蓬莱市| 英吉沙县| 梅州市| 拉孜县| 新竹市| 太仆寺旗| 西乌珠穆沁旗| 仲巴县| 寿光市| 隆林| 嵩明县| 太康县| 大理市| 阜新市| 汝南县| 丰顺县| 富锦市|