Django CBV视图

本文介绍了Django的Class-Based View(CBV),强调了CBV在Web开发中的优势,如便于扩展和处理多种请求。文章详细讲解了Django提供的基础视图类,包括View、RedirectView、TemplateView、ListView和DetailView,以及它们的使用方法和关键属性。同时,讨论了CBV的处理流程和如何通过CBV解决处理多个URL逻辑的问题。
摘要由CSDN通过智能技术生成

注明

本笔记主要参考《Django应用开发实战》《Django企业开发实战》,这两本书前者详细,后者精炼。学习之后真的是感觉自己进步了很多。值得一读



前言

Web开发是一项无聊而且单调的工作,特别是在视图功能编写方面更为显著。Django为了减少这种痛苦,植入了视图类这一功能,该功能无须编写大量代码即可完成数据视图的开发,这种以类的形式实现响应与请求处理称为CBV。视图类是通过定义和声明类的形式实现的。


一、CBV说明

在介绍CBV之前,我们必须要说明如下几点:

  • 单从技术层面来说,CBV和FBV并没有高低之分,有的仅是对场景的适用性。
  • 使用CBV的好处在于便于扩展,对于同一个URL需要处理多种请求CBV显然更加合适,因为可以避免写很多分支语句。

二、Django提供了常用类

View基本视图类

它实现了http方法的分发逻辑。如get请求触发get方法等,但他没有实现具体的方法,即需要重构。

CBV的使用:
=======urls.py=======
urlpatterns = [
    path('test_cbv', views.TestCBV.as_view())
]
======views.py=====
from django.views import View 
class TestCBV(View):
    def get(self, request):
        return HttpResponse("ok")

注:当我们使用CBV方式时,首先要注意urls.py文件中要写成“类名.as_view()”方式映射,【如果使用的是非自己定义的CBV那么as_view中可以添加对应CBV的参数】其次在类中我们定义的get/post方法这些方法的名字不是我们自己定义的,而是按照固定样式,View类中支持以下方法:

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head',
 'options', 'trace']

重定向视图类

在谈到重定向时,简要的演示两种重定向的方式:一种是ReirectView(url=‘跳转路径’)重定向视图类的形式,一种是redirect函数。后者已经详细说明,下面来具体介绍一下前者重写
视图类。
格式:RedirectView()
四大属性:

  • permanet:根据属性值得真假选择重定向方式。若为True,HTTP的状态码为301否则302.
  • url:代表重定向的路由地址
  • pattern_name:代表重定向的路由命名,与url不能混用。
  • query_string:是否将当前路由地址参数传递给重定向的路由地址。

八个方法:

  • get_redirect_url():根据属性pattern_name所指向的路由命名来生成相应的路由地址。
  • get()触发HTTP的GET请求所执行的响应处理。
  • post():略
urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.test,name='test'),
    # path('404',views.notfind)
    path('turnTo',turnTo.as_view(),name='turnTo')
]

view.py
class turnTo(RedirectView):
    #设置属性
    permanent = False
    url = None
    pattern_name = 'test'
    query_string = True
    #重写get_redirct_url
    def get_redirect_url(self, *args, **kwargs):
        print('something')
        return super().get_redirect_url(*args,**kwargs)
    #重写get
    def get(self,request,*args,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值