注明
本笔记主要参考《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,