Django常用功能

靜態文件

  • 將靜態文件放到一個單獨的目錄中,以方便管理、
    - 靜態文件可以放在項目根目錄下,也可以放在應用的目錄下
    - 由於有些靜態文件在項目中是通用的,所以推薦放在項目的根目錄下,方便管理
  • 在項目的setting文件中,通過STATICFILES_DIRS列表配置靜態文件的加載路徑
  • 在html頁面調用靜態文件時,需要指定靜態文件所在的路徑
  • 爲了安全和方便維護,可以通過配置項達到隱藏真實靜態文件路徑的目的
    - 使用static標籤,根據配置項動態生成靜態文件路徑(結合Nginx佈署時,會將所有的靜態文件都交給Nginx處理,而不用轉到Django部分,所以這項配置就無效了,這個功能有些雞肋!)
#反向解析加載靜態圖片路徑
{% load staticfiles %}    
{% static 'images/01.jpg'%}

中間件

  • 概念:Django中的中間件是一個輕量級、底層的插件系統,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出;中間件的設計爲開發者提供了一種無侵入式的開發方式,增強了Django框架的健壯性,其它的MVC框架也有這個功能,名稱爲IoC。
  • 使用場景:當某些操作在每次請求或響應時都會執行時,可以寫在中間件中
  • 設計思想:面向切面編程/無侵害式編程
# 中間件方法(Django在中間件中預置了六個方法,這六個方法的區別在於不同的階段執行,對輸入或輸出進行干預)
1.初始化:無需任何參數,服務器響應第一個請求的時候調用一次,用於確定是否啓用當前中間件
def __init__():
    pass
2.處理請求前:在每個請求上調用,返回NoneHttpResponse對象
def process_request(request):
    pass
3.處理視圖前:在每個請求上調用,返回NoneHttpResponse對象
def process_view(request, view_func, view_args, view_kwarge):
    pass
4.處理模板相應前:在每個請求上調用 ,返回實現了render方法的相應對象
def process_temlate_pesponse(request, response):
    pass
5.處理響應後:所有響應返回瀏覽器之前被調用,在每個請求上調用,返回HttpResponse對象
def process_response(request, response):
    pass
6.異常處理:當視圖拋出異常時調用,在每個請求上調用,返回一個HttpResponse對象
def process_exception(request, exception)

# 自定義中間件
- 中間件是一個獨立的python類,可以定義這六個方法中的一個或多個
- 在應用中新建middleware.py文件,在文件中定義類TestMiddleware
- 配置自定義中間件:應用.文件名.類名 == Book.middleware.TestMiddleware

#如果多箇中間件中註冊了相同的方法,則先註冊的後執行

站點管理

  • 內容發佈的部分由網站的管理員負責,包括查看、添加、修改、刪除數據
  • Django項目中默認啓用Admin管理站點:列表頁選項, 編輯頁選項, 重寫模板
#準備工作
啓用mysql數據庫+定義AreaInfo模型類+創建管理員+註冊模型類
再 重寫模型__str__
# 控制站點管理頁的展示
- 類ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表頁的展示方式、添加修改頁的展示方式
- 註冊模型類前定義管理類AreaAdmin
class AreaAmin(admin.ModelAdmin):
    pass
- 管理類有兩種使用方式
1.註冊參數
admin.site.register(AreaInfo, AreaAdmin)
2.裝飾器
@admin.register(AreaInfo)
class AreaAmin(admin.ModelAdmin):
    pass
列表頁選項
  • 頁大小
#設置每頁展示的條數,默認每頁顯示100條
list_per_page = 100
  • 操作選項Action的位置:默認在管理頁面的頂部有一個,管理頁面底部沒有
# 在頭部增加一個
actions_on_top = True
# 在底部增加一個
actions_on_bottom = False
  • 列表中的列: 指定在模型列表中顯示哪些字段作爲列
# 指定展示的字段
list_display = [字段1, 字段2, ...]

 # 定義模型方法作爲列
def title(self):
      return self.name
# 指定方法作爲列的排序依據
title.admin_order_field = 'name'
  • 模型方法爲列:模型方法和模型字段都指定爲列顯示在管理界面上
  • 列標題:默認爲屬性或方法的名稱,可以通過屬性設置爲其他名稱。設置方式
1.short_description 屬性設置
            -  方法名.short_description = '列標題
2.verbose_name 屬性設置
  • 右側欄過濾器:只能接收字段,會將對應字段的值列出來,用於快速過濾,一般用於有重複值的字段
list_filter = ['字段1', '字段2', ...]
  • 搜索框:用於對指定字段的值進行搜索,支持模糊查詢
search_fields = ['字段1', '字段2', ...]
編輯頁選項
  • 字段順序:根據列表順序指定編輯界面字段順序
fields = ['字段1', '字段2', ...]
  • 字段分組:字段分組fieldsets與字段順序fields二選一使用
fieldsets = (
        ('組1標題', {'fields': ('字段1', '字段2')}),
        ('組2標題', {'fields': ['字段3', '字段4']}),
 )
  • 關聯對象
在一對多的關係中,可以在一端的編輯頁面中編輯多端的對象
    - 嵌入多端對象的方式包括表格、塊兩種
類型InlineModelAdmin:表示在模型的編輯頁面嵌入關聯模型的編輯
    - 子類StackedInline:以塊的形式嵌入
    - 子類TabularInline:以表格的形式嵌入
在admin.py文件中,創建AreaStackedInline類,繼承自admin.StackedInline
重寫模板
  • 當我們需要修改站點管理頁面的樣式時,可以重寫站點的模板
在templates 目錄下創建 admin目錄
再在admin文件下創建base_site.html

上傳圖片

  • 兩種方式上傳圖片(上傳後,將圖片存儲在項目靜態文件中,然後將圖片的路徑存儲在數據庫表中)
    • 在站點管理頁面中上傳圖片
    • 自定義form表單中上傳圖片
# 保存在static目錄下,media表示多媒體文件目錄,圖片上傳後保存的路徑:static/media/Book
# 在settings中,配置圖片上傳後保存的目錄
MEIA_ROOT=os.path.join(BASE_DIR, 'static/media')
# 後臺站點上傳圖片
# 自定義表單上傳圖片
chunks() 保證數據安全

分頁

  • Django提供了數據分頁類,定義在django.core.paginator中
  • 對象Paginator是用來進行分頁處理的,可以把一組數據按照每頁n條進行分隔
  • 對象Page用於表示第m頁的數據
#Paginator對象
方法init(列表,int):返回分頁對象,參數爲列表數據,每面數據的條數
方法page(m):返回Page對象,表示第m頁的數據,下標以1開始
屬性page_range:返回頁碼列表,從1開始,例如[1, 2, 3, 4]
屬性count:返回對象總數
屬性num_pages:返回頁面總數
#Page對象
調用Paginator對象的page()方法返回Page對象,不需要手動構造
屬性number:返回當前是第幾頁,從1開始
屬性paginator:當前頁對應的Paginator對象
方法has_next():如果有下一頁返回True
方法has_previous():如果有上一頁返回True
屬性object_list:返回當前頁對象的列表
方法len():返回當前頁面對象的個數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章