亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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

標簽:
Java

类视图使用装饰器

为类视图添加装饰器,可以使用两种方法。

为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图。

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')

原文出处:https://www.cnblogs.com/skaarl/p/9456931.html

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消