Django REST Framework框架介紹以及簡單使用


一、 Django REST framework介紹

Django REST framework是基於Django實現的一個RESTful風格API框架,能夠幫助我們快速開發RESTful風格的API。

官網:https://www.django-rest-framework.org/

中文文檔:https://q1mi.github.io/Django-REST-framework-documentation/

二、Django REST framework安裝和配置

1、安裝

pip install djangorestframework

2、配置

如果想要獲取一個圖形化的頁面,需要將 rest_framework 注冊到項目的INSTALL_APPS中。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework'
    'Api.apps.ApiConfig',
]

三、基於Django實現RESTful API

1、路由

from django.urls import path

from Api.views import Users

app_name = 'Api'

urlpatterns = [
path('users/', Users.as_view(), name='users')
]

2、視圖

class Users(View):
    def get(self, request, *args, **kwargs):
        data = {
            'code': 0,
            'data': 'response data'
        }
        return JsonResponse(data=data, status=200)

    def post(self, request, *args, **kwargs):
        data = {
            'code': 0,
            'data': 'response data'
        }
        return JsonResponse(data=data, status=200)

3、使用postman分別發送get和post請求

(1)、get請求

 

 (2)、post請求

 

(3)注意:

 狀態碼一般兩種寫入方式,一種是直接寫在data中,但是這種寫入不是真正意義上的改變狀態碼,第二種就是上面中的例子,寫入JsonResponse中

另外,發送post請求需要csrf_token豁免。

四、基於Django RESTful Framework框架實現

1、路由

from django.urls import path, include

from Api.views import Users, TestView

app_name = 'Api'

urlpatterns = [
    path('users/', Users.as_view(), name='users'),
    path('test/', TestView.as_view(), name='test')
]

2、視圖

from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from rest_framework.response import Response
from rest_framework.views import APIView



class TestView(APIView):
    def dispatch(self, request, *args, **kwargs):
        """
        請求到來之后,都要請求dispatch方法,dispath方法根據不同的請求方式出發get/post/put等方法
        注意:APIView中,dispath方法有好多好多功能
        """
        return super().dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        data = {
            "status": 200,
            'data': 'get success'
        }
        return Response(data, status=201)

    def post(self, request, *args, **kwargs):
        data = {
            'status': 200,
            'data': 'post success'
        }
        return Response(data, status=201)

五、APIView中的方法

1、renderer_classes  渲染的類

2、parser_classes 解析轉換的類

3、authentication_classes  認證的類

4、throttle_classes 節流的類,控制請求頻率

5、permission_classes 權限的類

6、content_negotiation_class 內容過濾類

7、metadata_class 元信息的類

8、versioning_class 版本控制的類

9、as_view()

調用父類中的as_view ->dispatch方法

dispatch方法被重寫

initialize_request 使用django的request構建了一個REST中的Request

initial

  perform_authentication

  執行用戶認證,遍歷認證器,如果認證成功返回一個元祖,元祖中的第一個元素就是user,第二個元素就是auth,token

  check_permissions

  檢查權限,遍歷我們的權限檢測器,只要有一個權限檢測沒有通過,就直接顯示權限被拒絕,所有權限都滿足,才算是擁有權限。

  check_throttles 

  檢測頻率,遍歷頻率限制器,如果驗證不通過,就需要等待 

  csrf_exempt

  所有APIView的自雷都是csrf豁免的

六、錯誤碼

封裝status模塊中,實際上就是一個常量類

七、針對視圖函數的包裝

1、CBV

  APIView

2、FBV

  添加@api_view裝飾器

  必須手動指定允許的請求方法

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM