最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Django通用視圖中的函數(shù)包裝

 更新時(shí)間:2015年07月21日 16:25:46   投稿:goldensun  
這篇文章主要介紹了詳解Django通用視圖中的函數(shù)包裝,Django是最具人氣的Python web開(kāi)發(fā)框架,需要的朋友可以參考下

用函數(shù)包裝來(lái)處理復(fù)雜的數(shù)據(jù)過(guò)濾

另一個(gè)常見(jiàn)的需求是按URL里的關(guān)鍵字來(lái)過(guò)濾數(shù)據(jù)對(duì)象。 之前,我們?cè)赨RLconf中硬編碼了出版商的名字,但是如果我們想用一個(gè)視圖就顯示某個(gè)任意指定的出版商的所有書(shū)籍,那該怎么辦呢? 我們可以通過(guò)對(duì) object_list 通用視圖進(jìn)行包裝來(lái)避免 寫(xiě)一大堆的手工代碼。 按慣例,我們先從寫(xiě)URL配置開(kāi)始:

urlpatterns = patterns('',
 (r'^publishers/$', list_detail.object_list, publisher_info),
 **(r'^books/(\w+)/$', books_by_publisher),**
)

接下來(lái),我們寫(xiě) books_by_publisher 這個(gè)視圖:

from django.shortcuts import get_object_or_404
from django.views.generic import list_detail
from mysite.books.models import Book, Publisher

def books_by_publisher(request, name):

 # Look up the publisher (and raise a 404 if it can't be found).
 publisher = get_object_or_404(Publisher, name__iexact=name)

 # Use the object_list view for the heavy lifting.
 return list_detail.object_list(
  request,
  queryset = Book.objects.filter(publisher=publisher),
  template_name = 'books/books_by_publisher.html',
  template_object_name = 'book',
  extra_context = {'publisher': publisher}
 )

這樣寫(xiě)沒(méi)問(wèn)題,因?yàn)橥ㄓ靡晥D就是Python函數(shù)。 和其他的視圖函數(shù)一樣,通用視圖也是接受一些 參數(shù)并返回 HttpResponse 對(duì)象。 因此,通過(guò)包裝通用視圖函數(shù)可以做更多的事。

注意

注意在前面這個(gè)例子中我們?cè)?extra_context中傳遞了當(dāng)前出版商這個(gè)參數(shù)。
處理額外工作

我們?cè)賮?lái)看看最后一個(gè)常用模式:

想象一下我們?cè)?Author 對(duì)象里有一個(gè) last_accessed 字段,我們用這個(gè)字段來(lái)記錄最近一次對(duì)author的訪問(wèn)。 當(dāng)然通用視圖 object_detail 并不能處理這個(gè)問(wèn)題,但是我們?nèi)匀豢梢院苋菀椎鼐帉?xiě)一個(gè)自定義的視圖來(lái)更新這個(gè)字段。

首先,我們需要在URL配置里設(shè)置指向到新的自定義視圖:

from mysite.books.views import author_detail

urlpatterns = patterns('',
 # ...
 **(r'^authors/(?P<author_id>\d+)/$', author_detail),**
 # ...
)

接下來(lái)寫(xiě)包裝函數(shù):

import datetime
from django.shortcuts import get_object_or_404
from django.views.generic import list_detail
from mysite.books.models import Author

def author_detail(request, author_id):
 # Delegate to the generic view and get an HttpResponse.
 response = list_detail.object_detail(
  request,
  queryset = Author.objects.all(),
  object_id = author_id,
 )

 # Record the last accessed date. We do this *after* the call
 # to object_detail(), not before it, so that this won't be called
 # unless the Author actually exists. (If the author doesn't exist,
 # object_detail() will raise Http404, and we won't reach this point.)
 now = datetime.datetime.now()
 Author.objects.filter(id=author_id).update(last_accessed=now)

 return response

注意

除非你添加 last_accessed 字段到你的 Author 模型并創(chuàng)建 books/author_detail.html 模板,否則這段代碼不能真正工作。

我們可以用同樣的方法修改通用視圖的返回值。 如果我們想要提供一個(gè)供下載用的 純文本版本的author列表,我們可以用下面這個(gè)視圖:

def author_list_plaintext(request):
 response = list_detail.object_list(
  request,
  queryset = Author.objects.all(),
  mimetype = 'text/plain',
  template_name = 'books/author_list.txt'
 )
 response["Content-Disposition"] = "attachment; filename=authors.txt"
 return response

這個(gè)方法之所以工作是因?yàn)橥ㄓ靡晥D返回的 HttpResponse 對(duì)象可以象一個(gè)字典 一樣的設(shè)置HTTP的頭部。 隨便說(shuō)一下,這個(gè) Content-Disposition 的含義是 告訴瀏覽器下載并保存這個(gè)頁(yè)面,而不是在瀏覽器中顯示它。

相關(guān)文章

  • Python基于xlrd模塊處理合并單元格

    Python基于xlrd模塊處理合并單元格

    這篇文章主要介紹了Python基于xlrd模塊處理合并單元格,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 實(shí)例Python處理XML文件的方法

    實(shí)例Python處理XML文件的方法

    這篇文章主要介紹了實(shí)例Python處理XML文件的方法,包括用Python處理XML大文件的情況,需要的朋友可以參考下
    2015-08-08
  • Keras中的兩種模型:Sequential和Model用法

    Keras中的兩種模型:Sequential和Model用法

    這篇文章主要介紹了Keras中的兩種模型:Sequential和Model用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作

    NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作

    NumPy一個(gè)非常重要的作用就是可以進(jìn)行多維數(shù)組的操作,這篇文章主要介紹了NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python模擬嗶哩嗶哩滑塊登入驗(yàn)證的實(shí)現(xiàn)

    python模擬嗶哩嗶哩滑塊登入驗(yàn)證的實(shí)現(xiàn)

    這篇文章主要介紹了python模擬嗶哩嗶哩滑塊登入驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python通過(guò)pyperclip庫(kù)操作剪貼板

    Python通過(guò)pyperclip庫(kù)操作剪貼板

    pyperclip是一個(gè)python庫(kù)用于操作剪貼板,可以非常方便地將文本復(fù)制到剪貼板或從剪貼板獲取文本,下面就跟隨小編一起了解一下pyperclip的具體使用吧
    2024-11-11
  • Python遍歷列表時(shí)刪除元素案例

    Python遍歷列表時(shí)刪除元素案例

    這篇文章主要介紹了Python遍歷列表時(shí)刪除元素案例,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • 深入解析Python中的上下文管理器

    深入解析Python中的上下文管理器

    Python中把進(jìn)入代碼塊前調(diào)用__enter__ 方法并在離開(kāi)代碼塊后調(diào)用__exit__方法的對(duì)象作為上下文管理器,本文中我們就來(lái)深入解析Python中的上下文管理器,來(lái)看看上下文管理器的作用及用法:
    2016-06-06
  • Python自動(dòng)化導(dǎo)出zabbix數(shù)據(jù)并發(fā)郵件腳本

    Python自動(dòng)化導(dǎo)出zabbix數(shù)據(jù)并發(fā)郵件腳本

    這篇文章主要介紹了Python自動(dòng)化導(dǎo)出zabbix數(shù)據(jù)并發(fā)郵件腳本,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python和ruby,我選誰(shuí)?

    python和ruby,我選誰(shuí)?

    本文給大家對(duì)比了下python和Ruby的異同以及各自的優(yōu)缺點(diǎn)等,向大家展示了python與Ruby的資源以及學(xué)習(xí)曲線,非常適合在此兩種語(yǔ)言中猶豫不決的小伙伴,希望大家能夠喜歡
    2017-09-09

最新評(píng)論

类乌齐县| 石渠县| 开原市| 灌云县| 辛集市| 达孜县| 资阳市| 淄博市| 沧源| 双城市| 息烽县| 张北县| 即墨市| 清新县| 枣强县| 临海市| 蓬溪县| 洛扎县| 汉沽区| 图们市| 邵阳市| 南雄市| 会昌县| 涪陵区| 康乐县| 浦县| 长垣县| 师宗县| 谢通门县| 遂溪县| 勃利县| 霍城县| 兴仁县| 高要市| 平遥县| 柳江县| 丰城市| 嵩明县| 永城市| 甘肃省| 定南县|