0
点赞
收藏
分享

微信扫一扫

Django类视图的作用


类视图使用

在Django中也可以使用类来定义一个视图,称为类视图

使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。如下所示

from django.views.generic import View

class RegisterView(View):
"""类视图:处理注册"""

def get(self, request):
"""处理GET请求,返回注册页面"""
return render(request, 'register.html')

def post(self, request):
"""处理POST请求,实现注册逻辑"""
return HttpResponse('这里实现注册逻辑')

类视图的好处:

  • 代码可读性好
  • 类视图相对于函数视图有更高的复用性 , 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可

定义类视图需要继承自Django提供的父类View,可使用​​from django.views.generic import View​​​或者​​from django.views.generic.base import View​​导入,定义方式如上所示。

配置路由时,使用类视图的​as_view()​方法来添加

urlpatterns = [
# 视图函数:注册
# path('register/', views.register),
# 类视图:注册
path('register/', views.RegisterView.as_view()),
]

Django类视图的作用_后端

 

类视图原理(了解)

@classonlymethod
def as_view(cls, **initkwargs):
"""
Main entry point for a request-response process.
"""
...省略代码...

def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
# 调用dispatch方法,按照不同请求方式调用不同请求方法
return self.dispatch(request, *args, **kwargs)

...省略代码...

# 返回真正的函数视图
return view


def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
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)

类视图的多继承重写dispatch

class CenterView(View):

def get(self,request):
return HttpResponse("OK")

def post(self,request):
return HttpResponse("OK")

使用面向对象多继承的特性。

class CenterView(LoginRequireMixin,View):

def get(self,request):
return HttpResponse("OK")

def post(self,request):
return HttpResponse("OK")

图像 小部件

举报

相关推荐

0 条评论