Rest-framework專欄講解(二):View

MedusaSorcerer的博客


點擊跳轉到 Rest-Framework 專欄目錄

在咱們瞭解的 MVC 模式和 MVT 模式中, 都有提到 View 視圖, 它是提供接口服務和邏輯的代碼, 例如在 Django 項目中常常會定義各類 class UserLoginViewSet(...) 或者是 def user_login(request, *args, **kwargs), 這類的都是後端服務定義的視圖類或者函數, 在 URL 對象中註冊他們, 就能夠實現一個邏輯 API 接口。python

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 的繼承父類,django

#!/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 章節講到。json

api_view

若是你習慣了函數視圖的方式, 也給予了你裝飾器修飾函數的方式:後端

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


@api_view(['GET'])
def medusa_view(request):
    ...
複製代碼

固然, 做者仍是認爲類視圖更加具備規範性。api

示例

#!/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)

複製代碼
相關文章
相關標籤/搜索