您的位置:首页 > 编程语言 > Go语言

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)

总结

  1. ContextMixin.get_context_data
    获取上下文(
    context
    )

  2. View
    实现请求的分发(dispatch):其get或post请求对应的处理函数handler

  3. TemplateResponseMixin.render_to_response
    利用上下文进行渲染并返回响应

  4. TemplateView组合ContextMixin和TemplateResponseMixin
    并实现完整的
    get
    请求的处理

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: