美文网首页
Django之CBV

Django之CBV

作者: CaiGuangyin | 来源:发表于2018-10-19 21:48 被阅读33次

CBV,即Class Base View,类基本视图。
在写API时,我们通常都是使用CBV,而非FBV (Function Base View)。

1. cbv遇到要加装饰器时

  1. 需要先导入 from django.utils.decorators import method_decorator
  2. 在指定方法上方加@method_decorator(x1) ,其中x1是你希望添加的装饰器
import json
from django.shortcuts import render, HttpResponse
from django.utils.decorators import method_decorator
from django.views import View


class AssetView(View):
    """
    资产相关接口
    """

    @method_decorator(x1)
    def get(self, requset, *args, **kwargs):
        host_list = ['c1.com', 'c2.com', 'c3.com']
        return HttpResponse(json.dumps(host_list))

    @method_decorator(x2)
    def post(self, request, *args, **kwargs):
        info = json.loads(request.body.decode('utf-8'))
        print(info)
        return HttpResponse('收到了')

2. CBV中免除CSRF认证

需要先导入from django.views.decorators.csrf import csrf_exempt

方式一

直接在视图class上加@method_decorator(csrf_exempt, name='dispatch')

import json
from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.views import View

# 方式一
@method_decorator(csrf_exempt, name='dispatch')
class AssetView(View):
    """
    资产相关接口
    """

    def get(self, requset, *args, **kwargs):
        host_list = ['c1.com', 'c2.com', 'c3.com']
        return HttpResponse(json.dumps(host_list))


    def post(self, request, *args, **kwargs):
        info = json.loads(request.body.decode('utf-8'))
        print(info)
        return HttpResponse('收到了')
方式二

在视图class中加入如下段代码:

# 方式二
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
     return super().dispatch(request, *args, **kwargs)

示例如下:

import json
from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.views import View

class AssetView(View):
    """
    资产相关接口
    """

    # 方式二
    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
         return super().dispatch(request, *args, **kwargs)


    def get(self, requset, *args, **kwargs):
        host_list = ['c1.com', 'c2.com', 'c3.com']
        return HttpResponse(json.dumps(host_list))


    def post(self, request, *args, **kwargs):
        info = json.loads(request.body.decode('utf-8'))
        print(info)
        return HttpResponse('收到了')

3. django rest_framework

  • 自动加csrf_exempt
  • 页面变好看
  • 自动反序列化
from rest_framework.views import APIView
from rest_framework.response import Response


class AssetView(APIView):
    def get(self, requset, *args, **kwargs):
        host_list = ['c1.com', 'c2.com', 'c3.com']
        # return HttpResponse(json.dumps(host_list))
        return Response(host_list)

    def post(self, request, *args, **kwargs):
        # info = json.loads(request.body.decode('utf-8'))
        # print(info)
        print(request.data)     # json格式
        return HttpResponse('收到了')

相关文章

  • Django基础:drf 源码视图解析

    Django 与drf 源码视图解析 一.原生Django CBV 源码分析:View 二.drf CBV 源码分...

  • Django之CBV

    CBV,即Class Base View,类基本视图。在写API时,我们通常都是使用CBV,而非FBV (Func...

  • Django中的CBV

    django中请求处理方式有2种:FBV 和 CBV CBV CBV(class base views) 就是在视...

  • DRF进阶

    一、Django的FBV和CBV FBV:Function-base views基于函数的视图CBV:Class-...

  • Django 的 cbv

    正如我们了解到的,Django 写视图函数有两种写法:cbv 和 fbv。cbv 提倡使用类来写,fbv 使用函数...

  • django的cbv

    FBV FBV(function base views) 就是在视图里使用函数处理请求。 在之前django的学习...

  • Django中CBV

    一.django处理业务逻辑的两种方式 FBV (function based views):使用函数来处理业务逻...

  • Django使用CBV处理请求

    在Django中有两种基本的处理用户请求的方式,分别是FBV和CBV,这里讲的是关于使用CBV处理用户请求的方式 ...

  • Django-FBV 和 CBV

    FBV 和 CBV django中请求处理方式有2种: FBV(function base views)** 就是...

  • 第三天

    drf开发商品列表页 django的view实现商品列表页&自带的serializer cbv => class ...

网友评论

      本文标题:Django之CBV

      本文链接:https://www.haomeiwen.com/subject/fcguzftx.html