(更新时间)2021年4月10日 Django框架 类视图
发布日期:2021-06-29 15:15:34 浏览次数:3 分类:技术文章

本文共 2175 字,大约阅读时间需要 7 分钟。

类视图使用

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

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

from django.views.generic import Viewclass 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 = [    # 视图函数:注册    # url(r'^register/$', views.register, name='register'),    # 类视图:注册    url(r'^register/$', views.RegisterView.as_view(), name='register'),]

类视图原理

@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")

转载地址:https://codeboy.blog.csdn.net/article/details/115585948 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(更新时间)2021年4月10日 Django框架 中间件
下一篇:(更新时间)2021年4月10日 Django框架 Session和Redis的使用

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月06日 06时46分18秒