Django REST Framework(二)Django的CBV

之前我们用的Django的视图函数叫FBV(也就是函数型视图函数),这里我们来试试CBV(类视图函数)的写法。类视图函数可以让代码看起来更简洁,用起来更方便。

  • CBV的简单使用

    • 视图类
      class BookView(View):
      
          def get(self, request):
              return HttpResponse("get请求book")
      
          def post(self, request):
              return HttpResponse("post请求book")

    • 路由:
      urlpatterns = [
          path('book/', views.BookView.as_view()),
      ]

    • postman测试get请求:
    • postman测试post请求:
  • CBV的源码解析

    • 继承
      class Animal(object):
      
          def __init__(self, name, age):
              self.name = name
              self.age = age
              self.sleep()  # 一定要明确self是谁
      
          def sleep(self):
              print("sleeping...")
      
      
      class Dog(Animal):
      
          def wangwang(self):
              print("旺旺叫")
      
          def sleep(self):
              print("仰天睡...")
      
      
      d = Dog("alex", 23)
    • 反射
      class Animal(object):
      
          def __init__(self, name, age, init_func_str):
              self.name = name
              self.age = age
      
              func = getattr(self, init_func_str)
              func()
      
          def sleep(self):
              print("sleeping...")
      
      class Dog(Animal):
      
          def wangwang(self):
              print("旺旺叫")
      
          def sleep(self):
              print("仰天睡...")
      
      
      d = Dog("alex", 23, "sleep")

    • CBV的源码解析

      ''''
      class BookView(View):
      
          def get(self, request):
              return HttpResponse("get请求book")
      
          def post(self, request):
              return HttpResponse("post请求book")
              
              
      class View:
              @classonlymethod
              def as_view(cls):
          
                  def view(request):
                      self = cls()
                      return self.dispatch(request, *args, **kwargs)
                      
                  return view
                  
            def dispatch(self, request):
              
                  handler = getattr(self, request.method.lower()) # 按请求方式分发       
                  return handler(request, *args, **kwargs)
      
      # 路由
      path('book/', views.BookView.as_view()),
      path('book/', View.view),
      
      # 一旦用户发起请求,比如get请求访问/book/,得到的是get方法的响应结果
      
      get请求访问/book/  =>  view()  =>   dispatch()  =>  get()  
      ''''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjjpp2301

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值