FBV与CBV区别

一、FBV(function base views)

  就是在视图里使用函数处理请求

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index)
]

  在视图函数中

def index(request):

二、CBV(class base views)

  CBV就是在视图中使用类处理请求

  实现本质:基于反射实现的

  

  注意事项:
  • cbv定义类的时候必须要继承view
  • 在写url时,必须加as_view
  • 类里面使用form表单提交的话,只有get和post方法
  • 类里面使用ajax发送数据的话,支持定义以下很多方法(restful规范)
    • get 获取数据
    • post 创建新数据
    • put 更新数据
    • patch 局部更新
    • delete 删除
    • head
    • options
    • trace

  优点:

  • 提高了代码的复用性,可以面向对象的技术,比如多继承
  • 可以用不同的函数针对不同的http方法处理,而不是通过很多if判断,提高了代码可读性
  代码逻辑

  url

from django.conf.urls import url
from myapp.views import MyView
urlpatterns = [
    url(r'^index/$', MyView.as_view()),
]

  view.py

from django.http import HttpResponse
from django.views import View
class GreetingView(View):
    name = "lin"
    def get(self, request):
    return HttpResponse(self.name)
   流程

  由路由----->as_view()方法----->view中dispatch方法(反射实现的)

  首先执行url中的as_view()方法

   

   执行view方法

  

三、csrf

  • 403报错原理是:基于中间件的process_view方法
  • 装饰器给单独函数进行设置(认证或跳过认证)

  一)免除csrf_tocken验证的方法

  1、针对FBV
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 这个函数不走认证
def user(request):
    pass
#走post请求时,就可以免除验证了

  注释setting.py中的46行代码之后单独需要验证的方法

from django.views.decorators.csrf import csrf_protect
@csrf_exempt # 这个函数需要认证
def user(request):
    pass
#注释掉setting中的csrf,之后需要认证可以导入
  2、若是CBV(装饰器要加到dispatch方法上且使用method_decorator装饰)

  

  或

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值