博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django-CBV
阅读量:6891 次
发布时间:2019-06-27

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

  CBV(class base views):python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写view,这样做的优点主要有:

  (1)提高了代码的复用性,可以使用面向对象的技术,比如Mixin

  (2)可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

  如果我们要写一个处理GET方法的view,用FBV(function base views)即在视图中用函数处理请求的话是这样

from django.shortcuts import render,HttpResponsedef my_view(request):    if request.method=='GET':        return HttpResponse('OK')

  如果用CBV写的话就是这样:

from django.shortcuts import render,HttpResponsefrom django.views import  Viewclass MyView(View):    def get(self,request):        return HttpResponse('OK')

   Django的url是将一个请求分配给可调用的函数的,而不是一个class。针对这个问题,CBV提供了一个as_view()静态方法(也就是类方法),调用这个方法,会创建一个类的实例,然后通过实例调用dispatch()方法,dispatch()方法会根据request的method的不同调用响应的方法来处理request,如果方法没有定义,会抛出HttpResponseAllowed异常

  在url中,就这么写

from django.conf.urls import urlfrom django.contrib import adminfrom app01.views import MyViewurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^index/$', MyView.as_view()),]

   类的属性可以通过两种方法设置,第一种是python常用方法,可以被子类覆盖

from django.shortcuts import render,HttpResponsefrom django.views import  Viewclass Pview(View):    name='lary'    def get(self,request):        return HttpResponse(self.name)class Sview(View):    name='lily'

   也可以在url中指定类的属性

from django.conf.urls import urlfrom django.contrib import adminfrom app01.views import *urlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'login',Sview.as_view(name='jary')),]

   csrf认证

#方式一from django.shortcuts import render,HttpResponseimport jsonfrom django.views import Viewfrom django.views.decorators.csrf import csrf_exempt,csrf_protectfrom django.utils.decorators import method_decorator# Create your views here.class StudentsView(View):    @method_decorator(csrf_exempt())    def get(self,request,*args,**kwargs):        return HttpResponse('GET')    def post(self,request,*args,**kwargs):        return HttpResponse('POST')    def put(self,request,*args,**kwargs):        return HttpResponse('PUT')    def delete(self,request,*args,**kwargs):        return HttpResponse('DELETE')
#方式二from django.shortcuts import render,HttpResponseimport jsonfrom django.views import Viewfrom django.views.decorators.csrf import csrf_exempt,csrf_protectfrom django.utils.decorators import method_decorator# Create your views here.@method_decorator(csrf_exempt,name='dispatch')class StudentsView(View):    def get(self,request,*args,**kwargs):        return HttpResponse('GET')    def post(self,request,*args,**kwargs):        return HttpResponse('POST')    def put(self,request,*args,**kwargs):        return HttpResponse('PUT')    def delete(self,request,*args,**kwargs):        return HttpResponse('DELETE')

 

转载于:https://www.cnblogs.com/iamluoli/p/9139671.html

你可能感兴趣的文章
spring使用@Async注解异步处理
查看>>
sfs
查看>>
Programming C#.Classes and Objects.成员方法
查看>>
《大道至简》读后感03
查看>>
分布式系统---幂等性设计
查看>>
把“数字的字符串”转换成“整数”时遇到的小麻烦
查看>>
消耗系统内存
查看>>
mysql-connector-c++ 编译安装
查看>>
A - Space Elevator(动态规划专项)
查看>>
C语言之数组与指针的易混淆知识点
查看>>
MakeFile 文件的使用
查看>>
css绝对居中img
查看>>
mysql使用存储过程和event定期删除
查看>>
基于python3+opencv3图像基础IO操作
查看>>
(旧)子数涵数·PS ——翻页效果
查看>>
Day2 Excel与数据处理之定位条件、选择性粘贴及查找功能
查看>>
npm install 时间很长解决方案
查看>>
搭建maven环境
查看>>
中国大学MOOC-C程序设计(浙大翁恺)—— 时间换算
查看>>
爬豆瓣电影名
查看>>