绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Rest-framework专栏讲解(二):View
2020-06-14 04:15:06

MedusaSorcerer的博客


点击跳转到 Rest-Framework 专栏目录

在我们了解的 MVC 模式和 MVT 模式中, 都有提到 View 视图, 它是提供接口服务和逻辑的代码, 例如在 Django 项目中经常会定义各种 class UserLoginViewSet(...) 或者是 def user_login(request, *args, **kwargs), 这类的都是后端服务定义的视图类或者函数, 在 URL 对象中注册他们, 就可以实现一个逻辑 API 接口。

APIView

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
from django.views import View


class MedusaView(View):
    ...
复制代码

次接触到 Django 框架的时候知道的试图类, 我们在定义一个试图类的时候仅仅需要继承他, 当你需要实现 GET 请求的时候, 你就在你定义的 class 里面实现 def get(self, request, *args, **kwargs) 方法, 当然 POSTDELETEPUT等方法都一样, 只要你在试图里定义它, 并返回一个 Response 对象给他。
但是使用 rest-framework 的时候, 我们都会使用 APIView 的继承父类,

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
from rest_framework.views import APIView

class MedusaViewSet(APIView):
    ...
复制代码

如果你去看了 APIView 的定义, 不难发现它也是继承了 View 实现的, 但是在 View 的基础上拓展了很多方法(功能), 我们在定义视图的时候更加方便的获取我们需要的数据, 返回我们需要数据。
并且任何 exceptions 的异常信息都会以一种响应状态码的方式返回, 你也可以重写 handle_exception(self, exc) 方法进行自定义错误处理函数响应。
例如你在获取请求参数的时候可以用 request.data.get("params") 来获取 json 请求参数体, 你也可以通过 request.query_params.get("params") 来获取 URL 参数, 等价于 request.GET.get("params"), 具体会在 Request 章节讲到。

api_view

如果你习惯了函数视图的方式, 也给予了你装饰器修饰函数的方式:

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
from rest_framework.decorators import api_view


@api_view(['GET'])
def medusa_view(request):
    ...
复制代码

当然, 作者还是认为类视图更加具有规范性。

示例

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
from rest_framework import views, response, status


class Medusa(views.APIView):

    def get(self, request, *args, **kwargs):
        return response.Response({'detail': 'get'}, status=status.HTTP_200_OK)

    def post(self, request, *args, **kwargs):
        return response.Response({'detail': 'post'}, status=status.HTTP_201_CREATED)

    def delete(self, request, *args, **kwargs):
        return response.Response({'detail': 'delete'}, status=status.HTTP_204_NO_CONTENT)

    def put(self, request, *args, **kwargs):
        return response.Response({'detail': 'put'}, status=status.HTTP_200_OK)

复制代码
分享好友

分享这个小栈给你的朋友们,一起进步吧。

MedusaSorcerer
创建时间:2020-06-29 16:36:50
学无止境, 学无止尽。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • zuike2000
    栈主
戳我,来吐槽~