python Django自定義錯誤處理機制

2021-10-12 17:25:12 字數 2345 閱讀 4416

使用exception錯誤處理機制。繼承後,在view.py裡面使用raise捕獲異常,需要使用 [ try: exception 自定義的異常類 :]才能正常使用,不夠靈活,使用方法如下:

#####  my_exception.py  #####

# 利用繼承自定義異常提示資訊

classmyexception(exception):

def__init__(self,code,error,data):

self.code=code

self.error=error

self.data=data

##### view.py #####

try:

if not 1<0:

raisemyexception(1001,'你的說法錯誤','1不小於0')

except myexceptionase:

pass

查詢了很多資料,都需要在settiong.py新增如下配置:

rest_framework=
並編輯自定義的異常處理函式

# response.data['message'] =response.data['detail'] #增加message這個key

# response.data['message'] ='方法不對' #增加message這個key

return response通過本人實踐,其實並不用以上兩步,下面進入正題。

繼承rest_framework.exceptions 的 apiexception 自定義異常處理機制

#####  exceptions.py #####

"""自定義異常"""

from rest_framework.exceptions import apiexception

from rest_framework import status

class baseerror(apiexception):

"""自定義異常基礎類"""

self.detail=detail# 輸出的錯誤資訊,可以是字典型,也可以是字串型

self.status_code=status_code# 響應的狀態碼

class defaulterror(baseerror):

"""預設異常,自定義使用,返回狀態-1,響應狀態400"""

def__init__(self,message=none,code=-1):

detail= # 繼承baseerror,傳給self.detail

super(defaulterror,self).__init__(detail)

#####  view.py #####

from rest_framework.views import apiview

class register(apiview):# 注意這裡必須使用apiview,不能使用view,這裡作者踩了坑

@staticmethod

defpost(r):

username=r.post.get('username')

password=r.post.get('password')

db_user=usermodels.objects.filter(username=username,password=password).first()

if not db_user:

msg='使用者名稱或密碼錯誤'

raise defaulterror()# 這裡就可以直接捕獲並彈出異常

return db_user.id

python Django框架實現自定義表單提交

除了使用django內建表單,有時往往我們需要自定義表單。對於自定義表單post方式提交往往會帶來由csrf 跨站請求偽造 產生的錯誤 csrf verification failed.request aborted.本篇文章主要針對 表單提交 和 ajax提交 兩種方式來解決csrf帶來的錯誤 一...

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...