发布于2019-08-07 19:23 阅读(658) 评论(0) 点赞(1) 收藏(4)
urlpatterns = [ path('index/', views.index), ] # 视图函数里 def index(request): return render(request,"index.html")
urlpatterns = [ path("login/",views.LoginView.as_view()) ] # 视图函数里 class LoginView(View): def dispatch(self, request, *args, **kwargs): """ 重写dispatch方法, 可以放一些专属于LoginView的操作 """ return ... def get(self,request): return HttpResponse("OK") def post(self,request): return HttpResponse("OK") def put(self,request): return HttpResponse("OK") def delete(self,request): return HttpResponse("OK")
CBV的源码剖析:
Django的url是将一个请求分配给可调用的函数的,而不是一个class。针对这个问题,class-based view(即Django的基础View类)提供了一个 as_view() 的静态方法(也就是类方法),调用这个方法,会通过 self = cls(**initkwargs) 创建一个类的实例,然后通过实例调用 dispatch()
方法,dispatch()
方法会根据request的method的不同调用相应的方法来处理request(如get()
, post()
等)。到这里,这些方法和function-based view差不多了,要接收request,得到一个response返回。如果方法没有定义,会抛出HttpResponseNotAllowed异常。
python的一大重要的特性就是面向对象。而cbv更能体现python的面向对象。cbv是通过class的方式来实现视图方法的。class相对于function,更能利用多态的特定(多态: 可对不同类的对象使用同样的操作),因此更容易从宏观层面上将项目内的比较通用的功能抽象出来。
作者:磨子舒
链接:https://www.pythonheidong.com/blog/article/12373/c7858bb7e30c80fa16bd/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!