摘要:昨晚做了一個(gè)奇怪的夢(mèng)。解決方法是創(chuàng)建了一個(gè)額外的模型,里包含字段。原文地址一個(gè)關(guān)于的夢(mèng)我的博客時(shí)空路由器
Django Rest Framework 這個(gè)框架的相關(guān)資料確實(shí)少,碰到問(wèn)題比較難以解決,連睡覺(jué)都在思考解決的問(wèn)題。
最近有一個(gè)關(guān)于 Django Rest Framework 的問(wèn)題一直困擾我,在使用視圖集 ViewSet 的時(shí)候,有時(shí)候序列化模型的讀寫不一定完全一樣,這時(shí)候該如何輸出呢?
所謂日有所思,夜有所夢(mèng)。昨晚做了一個(gè)奇怪的夢(mèng)。
夢(mèng)的大概是這樣的:
我發(fā)現(xiàn)了 Django Rest Framework 在 Response 的時(shí)候可以定義一個(gè) Response Serializer Model,這樣就可以省去一些不必要顯示的字段。
我將信將疑,今天進(jìn)它的官網(wǎng)查找了一下到底有沒(méi)有這個(gè) API,發(fā)現(xiàn)確實(shí).......果然.........沒(méi)有。
不過(guò)按這個(gè)思路還是給了我解決方法,可能這個(gè)解決方法有些糙。
比如用戶信息的注冊(cè)和獲取,包含以下字段:
username
password
注冊(cè)的時(shí)候需要 username 、 password,然而獲取的時(shí)候只需要 username 不需要 password,而 serializer 的 fields 又是定義了 username 、 password,這樣很矛盾。
解決方法是創(chuàng)建了一個(gè)額外的 serializer 模型,fields 里包含 username 字段。然后重寫 create 方法,在 Response 之前將原先的序列化模型轉(zhuǎn)換成自定義的序列化模型,然后 Response。
具體解決方法定義兩個(gè) User 序列化模型,一個(gè)用于注冊(cè),一個(gè)用于顯示
class RegisterSerializer(serializers.ModelSerializer): class Meta: model = User fields = ("id", "username", "password") class DisplaySerializer(serializers.ModelSerializer): class Meta: model = User fields = ("id", "username")
重寫 create 方法,注冊(cè)后返回用戶的基本信息,而不包含密碼
def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) display_serializer = DisplaySerializer(data=serializer.data) display_serializer.is_valid(raise_exception=False) return Response(droider_serializer.data, status=status.HTTP_201_CREATED, headers=headers)
display_serializer 的 is_valid() 方法里 raise_exception 必須為 False, 因?yàn)?self.perform_create() 方法已經(jīng)創(chuàng)建了用戶,所以再次驗(yàn)證的時(shí)候會(huì)拋出 用戶已存在 的異常,所以用 False 忽略這個(gè)異常。
返回結(jié)果POST data
{ "username": "username", "password": "password" }
response data
{ "username": "username" }
其他方法也同理。
原文地址:一個(gè)關(guān)于 Django Rest Framework 的夢(mèng)
我的博客:時(shí)空路由器
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38684.html
摘要:昨晚做了一個(gè)奇怪的夢(mèng)。解決方法是創(chuàng)建了一個(gè)額外的模型,里包含字段。原文地址一個(gè)關(guān)于的夢(mèng)我的博客時(shí)空路由器 Django Rest Framework 這個(gè)框架的相關(guān)資料確實(shí)少,碰到問(wèn)題比較難以解決,連睡覺(jué)都在思考解決的問(wèn)題。 最近有一個(gè)關(guān)于 Django Rest Framework 的問(wèn)題一直困擾我,在使用視圖集 ViewSet 的時(shí)候,有時(shí)候序列化模型的讀寫不一定完全一樣,這時(shí)候該...
摘要:昨晚做了一個(gè)奇怪的夢(mèng)。解決方法是創(chuàng)建了一個(gè)額外的模型,里包含字段。原文地址一個(gè)關(guān)于的夢(mèng)我的博客時(shí)空路由器 Django Rest Framework 這個(gè)框架的相關(guān)資料確實(shí)少,碰到問(wèn)題比較難以解決,連睡覺(jué)都在思考解決的問(wèn)題。 最近有一個(gè)關(guān)于 Django Rest Framework 的問(wèn)題一直困擾我,在使用視圖集 ViewSet 的時(shí)候,有時(shí)候序列化模型的讀寫不一定完全一樣,這時(shí)候該...
摘要:前言對(duì)于前后端分離大家可能在網(wǎng)上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對(duì)于前后端的分離問(wèn)題的多年工作經(jīng)驗(yàn)的總結(jié)。今天,我們把這些經(jīng)驗(yàn)總結(jié)知識(shí)點(diǎn)分享給大家,希望可以幫助到大家。添加開啟黑白名單,任選其一。 前言 對(duì)于前后端分離大家可能在網(wǎng)上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對(duì)于前后端的分離問(wèn)題的多年工作經(jīng)驗(yàn)的總結(jié)。今天,我們把這些經(jīng)驗(yàn)總結(jié)知...
摘要:本文主要是用來(lái)記錄自己學(xué)習(xí)的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。這里主要會(huì)用到的知識(shí)有百度百科阮一峰理解架構(gòu)其余請(qǐng)自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來(lái)記錄自己學(xué)習(xí)django-rest-framework的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。 這里主要會(huì)用到的知識(shí)有 1. [django](https:...
摘要:本文主要是用來(lái)記錄自己學(xué)習(xí)的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。這里主要會(huì)用到的知識(shí)有百度百科阮一峰理解架構(gòu)其余請(qǐng)自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來(lái)記錄自己學(xué)習(xí)django-rest-framework的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。 這里主要會(huì)用到的知識(shí)有 1. [django](https:...
閱讀 1464·2023-04-25 17:18
閱讀 1894·2021-10-27 14:18
閱讀 2135·2021-09-09 09:33
閱讀 1852·2019-08-30 15:55
閱讀 2025·2019-08-30 15:53
閱讀 3449·2019-08-29 16:17
閱讀 3436·2019-08-26 13:57
閱讀 1739·2019-08-26 13:46