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

首頁 > 編程 > Python > 正文

詳解Django中類視圖使用裝飾器的方式

2020-02-15 22:44:59
字體:
來源:轉載
供稿:網友

類視圖使用裝飾器

為類視圖添加裝飾器,可以使用兩種方法。

為了理解方便,我們先來定義一個為函數視圖準備的裝飾器(在設計裝飾器時基本都以函數視圖作為考慮的被裝飾對象),及一個要被裝飾的類視圖。

def my_decorator(func):  def wrapper(request, *args, **kwargs):    print('自定義裝飾器被調用了')    print('請求路徑%s' % request.path)    return func(request, *args, **kwargs)  return wrapperclass DemoView(View):  def get(self, request):    print('get方法')    return HttpResponse('ok')  def post(self, request):    print('post方法')    return HttpResponse('ok')

4.1 在URL配置中裝飾

urlpatterns = [  url(r'^demo/$', my_decorate(DemoView.as_view()))]

此種方式最簡單,但因裝飾行為被放置到了url配置中,單看視圖的時候無法知道此視圖還被添加了裝飾器,不利于代碼的完整性,不建議使用。

此種方式會為類視圖中的所有請求方法都加上裝飾器行為(因為是在視圖入口處,分發請求方式前)。

4.2 在類視圖中裝飾

在類視圖中使用為函數視圖準備的裝飾器時,不能直接添加裝飾器,需要使用method_decorator將其轉換為適用于類視圖方法的裝飾器。

method_decorator裝飾器使用name參數指明被裝飾的方法

# 為全部請求方法添加裝飾器@method_decorator(my_decorator, name='dispatch')class DemoView(View):  def get(self, request):    print('get方法')    return HttpResponse('ok')  def post(self, request):    print('post方法')    return HttpResponse('ok')# 為特定請求方法添加裝飾器@method_decorator(my_decorator, name='get')class DemoView(View):  def get(self, request):    print('get方法')    return HttpResponse('ok')  def post(self, request):    print('post方法')    return HttpResponse('ok')

如果需要為類視圖的多個方法添加裝飾器,但又不是所有的方法(為所有方法添加裝飾器參考上面例子),可以直接在需要添加裝飾器的方法上使用method_decorator,如下所示

from django.utils.decorators import method_decorator# 為特定請求方法添加裝飾器class DemoView(View):  @method_decorator(my_decorator) # 為get方法添加了裝飾器  def get(self, request):    print('get方法')    return HttpResponse('ok')  @method_decorator(my_decorator) # 為post方法添加了裝飾器  def post(self, request):    print('post方法')    return HttpResponse('ok')  def put(self, request): # 沒有為put方法添加裝飾器    print('put方法')    return HttpResponse('ok')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴海县| 任丘市| 天峻县| 北京市| 交城县| 扎赉特旗| 南涧| 临颍县| 高邑县| 漠河县| 渝北区| 葫芦岛市| 揭阳市| 江达县| 宁陕县| 增城市| 建德市| 乌鲁木齐县| 循化| 临武县| 江西省| 翁牛特旗| 泾源县| 常宁市| 大连市| 浠水县| 泽普县| 康乐县| 收藏| 鄂伦春自治旗| 武邑县| 瓮安县| 武山县| 扶余县| 新竹市| 孟津县| 阿瓦提县| 胶南市| 汝南县| 三原县| 堆龙德庆县|