好贷网好贷款

深入学习Django源码基础15 - views简要分析学习

发布时间:2016-12-4 18:20:38 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"深入学习Django源码基础15 - views简要分析学习",主要涉及到深入学习Django源码基础15 - views简要分析学习方面的内容,对于深入学习Django源码基础15 - views简要分析学习感兴趣的同学可以参考一下。

在django中,view有2种编码形式。 1种是function返回 1种是class返回 分析 views文件夹 views |----decorators |----__init__.py |----cache.py |----clickjacking.py |----csrf.py |----debug.py |----gzip.py |----http.py |----vary.py |----generic |----__init__.py |----base.py |----dates.py |----detail.py |----edit.py |----list.py |----__init__.py |----csrf.py |----defaults.py |----i18n.py |----static.py 对于views目录和decorators目录下的文件,主要是为了封装了一些函数和装饰器,为了方便函数返回response的代码 对于generic目录下的代码。感觉写起来很帅气。利用多重集成实现mvc分离。把数据源获取,模版渲染。拆分开 下面是精简演示代码。具体就不分析了 from functools import update_wrapper class ContextMixin(object): def get_context_data(self, **kwargs): print 'get contenxt' if 'view' not in kwargs: kwargs['view'] = self return kwargs class View(object): http_method_names = ['get','post','put','delete'] def __init__(self, **kwargs): for (k, v) in kwargs.items(): setattr(self, k, v) @classmethod def as_view(cls, **initkwargs): for key in initkwargs: if key in cls.http_method_names: raise "can't set httpmethod key" def view(request, *args, **kwargs): self = cls(**initkwargs) self.request = request self.args = args self.kwargs = kwargs return self.dispatch(request, *args, **kwargs) update_wrapper(view, cls, updated=()) update_wrapper(view, cls.dispatch, updated=()) return view def dispatch(self, request, *args, **kwargs): if request.method.lower() in self.http_method_names: handler = getattr(self, request.method.lower()) else: raise "Can't dispatch request" return handler(request, *args, **kwargs) class TemplateResponseMixin(object): template_name = None def render_to_response(self, context, **response_kwargs): print 'render context:[%s] to html["%s"]' % (context, self.template_name) class TemplateView(TemplateResponseMixin, ContextMixin, View): def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return self.render_to_response(context) class AboutView(TemplateView): template_name = 'about.html' class Request(object): def __init__(self, method = 'get'): self.method = method AboutView.as_view(template_name='1.html')(Request()) 输出内容为: get contenxt render context:[{'view': <__main__.AboutView object at 0x103bd8e10>}] to html["1.html"]

上一篇:S3C6410开发之ADC(一)
下一篇:闪加查询、闪回版本查询、闪回事务查询

相关文章

相关评论