django通用视图的base模块
2020-03-19 20:41
357 查看
base
base模块的UML类图:
ContextMixin
返回模板所需的上下文
class ContextMixin: """ 一个默认的context mixin,其作用提供模板所需的上下文 """ extra_context = None def get_context_data(self, **kwargs): """ 用extra_context更新传递过来的kwargs :param kwargs: :return: """ kwargs.setdefault('view', self) if self.extra_context is not None: kwargs.update(self.extra_context) return kwargs
View
所有视图的父类。只实现dispatch-by-method和简单的完整性检查:
其主要方法为:
@classonlymethod def as_view(cls, **initkwargs): """请求响应处理的主要进入点:通过内部的view->dispatch->handler""" def dispatch(self, request, *args, **kwargs): """根据request.method返回对应的handler,如果没有则告诉客户端请求方法不允许""" 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)
TemplateResponseMixin
利用上下文以及模板参数渲染模板并返回响应。
lass TemplateResponseMixin: """一个用来渲染模板的mixin""" template_name = None template_engine = None response_class = TemplateResponse context_type = None def render_to_response(self, context, **response_kwargs): response_kwargs.setdefault('context_type', self.context_type) return self.response_class( request=self.request, template=self.get_template_names(), context=context, using=self.template_engine, **response_kwargs )
TemplateView
mro顺序为:
[TemplateView, TemplateResponseMixin, ContextMixin, View]
ContextMixin为TemplateResponseMixin准备模板的上下文,而TemplateResponseMixin利用上下文渲染模板返回响应,TemplateView实现get方法返回响应,View的dispatch方法根据request.method返回get方法
class TemplateView(TemplateResponseMixin, ContextMixin, View): """ Render a template. Pass keyword arguments from the URLconf to the context. """ def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return self.render_to_response(context)
总结
-
ContextMixin.get_context_data
获取上下文(context
) -
View
实现请求的分发(dispatch):其get或post请求对应的处理函数handler -
TemplateResponseMixin.render_to_response
利用上下文进行渲染并返回响应 -
TemplateView组合ContextMixin和TemplateResponseMixin
并实现完整的get
请求的处理
相关文章推荐
- 在Django中创建URLconf相关的通用视图的方法
- Django 学习小组:基于类的通用视图详解(一)
- Django初级手册4-表单与通用视图
- Python Django进阶教程(四)(通用视图)
- Django 1.6 基于类的通用视图
- django:通用视图-UpdateView更新有参数的form类
- Django笔记 自定义ListView通用视图
- 6.Django入门:教程-表单和通用视图
- django的通用视图
- django 通用视图
- django学习笔记——基于类的通用视图(reference)
- Django基础核心技术介绍(3): 视图View的编写及如何使用通用视图(Generic View)
- 【django 学习笔记】10-通用视图
- Python - Django - 封装分页成通用的模块
- django 创建一个通用视图
- django通用视图的DetailView
- django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析
- 对Django中通用视图generic的一些理解
- Django 通用视图
- django使用通用视图_模板载入顺序