准备工作

创建环境

首先创建新项目:RESTApi,配置好settings.py,数据库驱动,创建RESTApi数据库。

创建类视图

创建类视图,并且写好对应的请求类型方法:views:

from django.shortcuts import render
from django.views import View


class HellowView(View):
    def get(self, request):

        return render(request, 'hello.html')

新建并注册App中的urls.py:
总urls.py:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^cbv/', include('App.urls', namespace='cbv')),
]

urls.py:

from django.conf.urls import url

from App import views

urlpatterns = [
    url(r'^hello/', views.HelloView.as_view(), name='hello'),
]

类视图View子类:TemplateView

  • 多继承的子类
  • 继承自View

    • 分发
    • 函数:dispatch
  • 继承自ContextMixin

    • 接收上下文
    • 从视图函数传递到模板的内容
    • get_content_data
  • 继承自TemplateResponseMixin

    • 将内容渲染到模板中
    • template_name
    • template_engine
    • response_class
    • content_type:网络传输的数据类型MIME,制定用什么软件打开
    • 函数:render_to_response

因为Django是重量级框架,创建类视图时可以观察到,继承了Django自带的View类,该类其实还有很多子类,点击进入:


可以看到有很多类视图,接下来我们可以看到有很多模板类视图:

比如TemplateView中就有刚刚我们所使用的get请求,并且可以看到这个类使用了多继承。

TemplateView继承了TemplateResponseMixin,该类用来为多继承做准备的。

TemplateResponseMixin:

class TemplateResponseMixin(object):
    """
    A mixin that can be used to render a template.
    """
    template_name = None
    template_engine = None
    response_class = TemplateResponse
    content_type = None

可以看到第5行有template_name参数,这个参数可以用来在urls.py中的as_view()中设置路由跳转的页面。

如:
urls.py:

urlpatterns = [
    url(r'^hello/', views.HelloView.as_view(), name='hello'),
    url(r'^template/', views.HelloTemplateView.as_view(template_name='hello.html'), name='template'),
]

view.py:

class HelloTemplateView(TemplateView): # 继承TemplateView
    pass

在urls中可以直接返回模板资源,达到了减少代码量的目的。


最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏