Django rest framework之全域性異常、封裝Response物件及自動生成介面文件
1、全域性異常
統一介面的返回方式,即便檢視函式執行出錯也能被捕獲
1.1、使用方式
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import exception_handler
# 定義一個函式
def custom_exception_handler(exc, context):
# 先呼叫REST framework預設的異常處理方法獲得標準錯誤響應物件
response = exception_handler(exc, context)
# 在此處補充自定義的異常處理
if response is None:
response = Response({'code':999,'detail': '未知錯誤'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return response
# 在setting中配置
REST_FRAMEWORK = {
'EXCEPTION_HANDLER':'app01.utils.common_exception_handler'
}
1.2、案例
from rest_framework.views import exception_handler
from rest_framework.response import Response
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework import status
from django.db import DatabaseError
def exception_handler(exc, context):
response = drf_exception_handler(exc, context)
if response is None:
view = context['view']
print('[%s]: %s' % (view, exc))
if isinstance(exc, DatabaseError):
response = Response({'detail': '伺服器內部錯誤'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
else:
response = Response({'detail': '未知錯誤'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return response
# 在setting.py中配置
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'app01.ser.exception_handler'
}
1.3、REST framework定義的異常
- APIException 所有異常的父類
- ParseError 解析錯誤
- AuthenticationFailed 認證失敗
- NotAuthenticated 尚未認證
- PermissionDenied 許可權決絕
- NotFound 未找到
- MethodNotAllowed 請求方式不支援
- NotAcceptable 要獲取的資料格式不支援
- Throttled 超過限流次數
- ValidationError 校驗失敗
也就是說,很多的沒有在上面列出來的異常,就需要我們在自定義異常中自己處理了
2、封裝Response物件
1、以後都使用自己自定義封裝的response
class APIResponse(Response):
def __init__(self, code=100, msg='成功', data=None, status=None, headers=None, content_type=None, **kwargs):
dic = {'code': code, 'msg': msg}
if data:
dic['data'] = data
dic.update(kwargs) # 這裡使用update
super().__init__(data=dic, status=status,
template_name=None, headers=headers,
exception=False, content_type=content_type)
2、使用
return APIResponse(code=100,msg='查詢成功',data=ser.data,count=200,next='http://xxx.com')
3、自動生成介面文件
1、藉助於第三方: coreapi,swagger
2、在路由中配置
from rest_framework.documentation import include_docs_urls
path('docs/', include_docs_urls(title='圖書管理系統api'))
3、在配置檔案中
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
4、寫檢視類(需要加註釋)
class BookListCreateView(ListCreateAPIView):
"""
get:
返回所有圖書資訊.
asdfasfda
post:
新建圖書.
"""
queryset = Student.objects.all()
serializer_class = StudentSerializer
5、只需要在瀏覽器輸入,就可以看到自動生成的介面文件()
http://127.0.0.1:8000/docs/
相關文章
- [Django REST framework - 自動生成介面文件、分頁]DjangoRESTFramework
- Django REST framework API 指南(24):異常DjangoRESTFrameworkAPI
- 【django-vue】封裝logger 封裝全域性異常 封裝response 資料庫配置 使用者表繼承AbstractUser配置DjangoVue封裝資料庫繼承
- REST framework:介面文件RESTFramework
- Django(74)drf-spectacular自動生成介面文件Django
- Django筆記三十一之全域性異常處理Django筆記
- Django rest framework之ModelSerializDjangoRESTFramework
- DRF 自動生成介面文件
- 自動生成介面文件coreapiAPI
- django rest framework(4)DjangoRESTFramework
- flex全域性異常Flex
- django rest framework個人學習筆記(四)————Tutorial2.Request and ResponseDjangoRESTFramework筆記
- django-rest-framework 基礎四 過濾、排序、分頁、異常處理DjangoRESTFramework排序
- Django REST framework 分頁DjangoRESTFramework
- SpringBoot之全域性捕獲異常Spring Boot
- SpringBoot之全域性異常處理Spring Boot
- Android 全域性異常捕獲之CrashHandlerAndroid
- django rest framework serializers小結DjangoRESTFramework
- Django REST Framework Quickstart 專案DjangoRESTFrameworkUI
- Django REST framework完全入門DjangoRESTFramework
- django rest_framework面經DjangoRESTFramework
- wpf 捕獲全域性異常
- Android-AsyncTask及UncaughtExceptionHandler捕獲全域性性異常(ANR、FC)AndroidException
- Django REST framework API 指南(21):SchemasDjangoRESTFrameworkAPI
- 深度解析Django REST Framework 批量操作DjangoRESTFramework
- django rest framework mixins小結DjangoRESTFramework
- Django REST framework API 指南(8):渲染DjangoRESTFrameworkAPI
- Django REST framework API 指南(6):路由DjangoRESTFrameworkAPI路由
- Django REST framework API 指南(7):解析DjangoRESTFrameworkAPI
- Token認證——Django Rest framework(1)DjangoRESTFramework
- Django REST framework API 指南(15):限流DjangoRESTFrameworkAPI
- Django REST Framework中的Serializer relationsDjangoRESTFramework
- springboot 配置錯誤頁面及全域性異常Spring Boot
- spring 全域性異常處理Spring
- Android之ANR異常Application Not ResponseAndroidAPP
- 介面自動化之實現日誌記錄封裝封裝
- python自動化測試之異常及日誌Python
- 二、django rest_framework原始碼之認證流程剖析DjangoRESTFramework原始碼