python学习笔记之-CBV

CBV(class base views)

即在视图里通过类处理请求

首先处理类需要继承View

在路由系统配置请求对应的处理类的as_view()方法

    url(r'^obj/', views.obj.as_view()),

当请求执行时根据url执行处理类的父类as_view()方法

在方法中首先通过 self = cls(**initkwargs) 实例化

然后执行处理类的 self.dispatch() 方法,如果处理类没有 dispatch() 方法则执行其父类方法

在 dispatch() 方法中判断请求是否包含在 HTTP 的请求方法中,如果存在则通过反射获取对应函数,然后执行并返回客户端

# as_view() 代码片段

    def as_view(cls, **initkwargs):

        def view(request, *args, **kwargs):

            self = cls(**initkwargs)

            if hasattr(self, 'get') and not hasattr(self, 'head'):

                self.head = self.get

            self.request = request

            self.args = args

            self.kwargs = kwargs

            return self.dispatch(request, *args, **kwargs)

        view.view_class = cls

        view.view_initkwargs = initkwargs

        # take name and docstring from class

        update_wrapper(view, cls, updated=())

        # and possible attributes set by decorators

        # like csrf_exempt from dispatch

        update_wrapper(view, cls.dispatch, assigned=())

        return view

# dispatch() 代码片段

        def dispatch(self, request, *args, **kwargs):

        if request.method.lower() in self.http_method_names:

            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)

        else:

            handler = self.http_method_not_allowed

        return handler(request, *args, **kwargs)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 利用HTTP协议向服务器传参的几种途径、响应、Cookie、Session、类视图、中间件 注意: 1>Dja...
    Cestine阅读 1,292评论 0 2
  • 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》—...
    梁林張斌阅读 2,298评论 0 4
  • 用于python面试整理,主要来源于http://www.cnblogs.com/skiler/p/6952707...
    十里江城阅读 2,381评论 0 13
  • 第二天你们应该也都适应了吧!应该也很累吧!没关系、成长是最美丽的痛呀。1今天的你们明显比昨天进步了很多,从一开始的...
    赵大笑吖阅读 771评论 1 0
  • 影子紧跟我 如忠诚的狗 有时我踩着影子 如同踩着自己的灵魂 影子不喊疼 默然承受了一切 有时隐身于影子 做个道士 ...
    明子的世界阅读 163评论 0 2