Django REST framework 是一套基於Django框架編寫RESTful風格API的組件。 其中mixins配合viewsets能極其方便簡化對數據的增刪改查, 但本身並沒有對數據的批量更新刪除,利用rest_framework_extensions擴展包可以輕鬆幫我們實現這些功能。 ...
Django REST framework 是一套基於Django框架編寫RESTful風格API的組件。
其中mixins配合viewsets能極其方便簡化對數據的增刪改查,
但本身並沒有對數據的批量更新刪除,利用rest_framework_extensions擴展包可以輕鬆幫我們實現這些功能。
安裝使用
pip install rest_framework_extensions
views.py
在視圖類中繼承ListUpdateModelMixin
1 from rest_framework_extensions.mixins import ListUpdateModelMixin 2 class ShoppingCartViewSet(ListUpdateModelMixin, viewsets.ModelViewSet): 3 pass
settings.py
1 CORS_ALLOW_HEADERS = ['*'] # 允許的請求頭 2 CORS_ORIGIN_ALLOW_ALL = True # 允許跨域 3 4 REST_FRAMEWORK_EXTENSIONS = { 5 'DEFAULT_BULK_OPERATION_HEADER_NAME': None 6 }
使用瀏覽器本地測試,在請求頭加上:X-BULK-OPERATION: true
使用patch方式請求測試成功,狀態碼204,不會返回任何東西
使用PUT方法批量更新
以上在瀏覽器使用正常,但發現在微信小程式中並不支持patch方法,只能用put方法。要麼重新再寫一個put介面,要麼更改源碼。
ctrl點擊查看ListUpdateModelMixin碼源,果真只有put方法。怎麼辦?
把patch方法複製粘貼一份,改名為put即可,同樣測試成功。
\Lib\site-packages\rest_framework_extensions\bulk_operations\mixins.py
對於以上修改。對於沒有使用虛擬環境的同學,個人建議不要直接修改源碼,一定要把整個包拷到項目目錄下再修改。
在項目目錄下新建extra_apps文件夾,用來存放要修改的第三方包。
再在settings.py中添加以下。優先從extra_apps文件夾導包。
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
微信小程式測試正常