python - django-rest-framework如何實(shí)現(xiàn)對(duì)view參數(shù)進(jìn)行認(rèn)證的
問(wèn)題描述
比如有下面一個(gè)View,比較簡(jiǎn)單:
class UsersView(View): def get(self,request): ......
這個(gè)GET方法會(huì)接受一個(gè)參數(shù)id,也就是用戶的ID,理想的狀態(tài)是只要進(jìn)入get方法內(nèi),那么這個(gè)用戶就是存在的,否則就直接拋404或者其他。
但現(xiàn)在的做法是在view里面做判斷用戶是否存在,然后再做不同的操作。
Qclass UsersView(View): authentication_classes = .... permission_classes = .... serializer_class = ....
不知道rest里面有沒有這種方法,可以在進(jìn)入View里面之前就可以做參數(shù)的驗(yàn)證,而不用在View里面。
問(wèn)題解答
回答1:請(qǐng)求不到的資源會(huì)自動(dòng)拋出404錯(cuò)誤
回答2:rest的view中設(shè)置了authentication_classes,可以在進(jìn)入view函數(shù)之前進(jìn)行相應(yīng)的鑒權(quán),可以編寫定制的鑒權(quán)類,繼承authentication.BaseAuthentication類并實(shí)現(xiàn)authentication(self, request)方法,在該方法進(jìn)行你需要的邏輯判斷,返回相應(yīng)的錯(cuò)誤信息等。
不過(guò)主要用作當(dāng)前請(qǐng)求用戶的鑒權(quán),像判斷ID是否存在在view里面寫很正常的,如果多個(gè)view都需要可以寫一個(gè)裝飾器即可。
相關(guān)文章:
1. 如何解決docker宿主機(jī)無(wú)法訪問(wèn)容器中的服務(wù)?2. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????3. javascript - 請(qǐng)指條明路,angular的$event,在select中卻是undefined?4. 如何修改vim插件vimwiki中Vimwiki2HTML的一些細(xì)節(jié)5. javascript - JS事件委托問(wèn)題6. javascript - 關(guān)于jquery的remove()方法7. JavaScript中怎么理解=、==和===8. java - Spring事務(wù)回滾問(wèn)題9. javascript - vue.js如何遞歸渲染組件.10. mongodb - Mongo java驅(qū)動(dòng)中,有沒有封裝好的函數(shù),可以直接取到文檔中的某個(gè)具體的值,而不是一個(gè)文檔?或者有沒有方法實(shí)現(xiàn)??
