成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一個關(guān)于 Django Rest Framework 的夢

zhisheng / 355人閱讀

摘要:昨晚做了一個奇怪的夢。解決方法是創(chuàng)建了一個額外的模型,里包含字段。原文地址一個關(guān)于的夢我的博客時空路由器

Django Rest Framework 這個框架的相關(guān)資料確實少,碰到問題比較難以解決,連睡覺都在思考解決的問題。

最近有一個關(guān)于 Django Rest Framework 的問題一直困擾我,在使用視圖集 ViewSet 的時候,有時候序列化模型的讀寫不一定完全一樣,這時候該如何輸出呢?

所謂日有所思,夜有所夢。昨晚做了一個奇怪的夢。

夢的大概是這樣的:

我發(fā)現(xiàn)了 Django Rest Framework 在 Response 的時候可以定義一個 Response Serializer Model,這樣就可以省去一些不必要顯示的字段。

我將信將疑,今天進它的官網(wǎng)查找了一下到底有沒有這個 API,發(fā)現(xiàn)確實.......果然.........沒有。

不過按這個思路還是給了我解決方法,可能這個解決方法有些糙。

比如用戶信息的注冊和獲取,包含以下字段:

username

password

注冊的時候需要 username 、 password,然而獲取的時候只需要 username 不需要 password,而 serializer 的 fields 又是定義了 username 、 password,這樣很矛盾。

解決方法是創(chuàng)建了一個額外的 serializer 模型,fields 里包含 username 字段。然后重寫 create 方法,在 Response 之前將原先的序列化模型轉(zhuǎn)換成自定義的序列化模型,然后 Response。

具體解決方法

定義兩個 User 序列化模型,一個用于注冊,一個用于顯示

class RegisterSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ("id", "username", "password")

class DisplaySerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ("id", "username")

重寫 create 方法,注冊后返回用戶的基本信息,而不包含密碼

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, 因為 self.perform_create() 方法已經(jīng)創(chuàng)建了用戶,所以再次驗證的時候會拋出 用戶已存在 的異常,所以用 False 忽略這個異常。

返回結(jié)果

POST data

{
    "username": "username",
    "password": "password"
}

response data

{
    "username": "username"
}

其他方法也同理。

原文地址:一個關(guān)于 Django Rest Framework 的夢
我的博客:時空路由器

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44451.html

相關(guān)文章

  • 一個關(guān)于 Django Rest Framework 的夢

    摘要:昨晚做了一個奇怪的夢。解決方法是創(chuàng)建了一個額外的模型,里包含字段。原文地址一個關(guān)于的夢我的博客時空路由器 Django Rest Framework 這個框架的相關(guān)資料確實少,碰到問題比較難以解決,連睡覺都在思考解決的問題。 最近有一個關(guān)于 Django Rest Framework 的問題一直困擾我,在使用視圖集 ViewSet 的時候,有時候序列化模型的讀寫不一定完全一樣,這時候該...

    Yuanf 評論0 收藏0
  • 一個關(guān)于 Django Rest Framework 的夢

    摘要:昨晚做了一個奇怪的夢。解決方法是創(chuàng)建了一個額外的模型,里包含字段。原文地址一個關(guān)于的夢我的博客時空路由器 Django Rest Framework 這個框架的相關(guān)資料確實少,碰到問題比較難以解決,連睡覺都在思考解決的問題。 最近有一個關(guān)于 Django Rest Framework 的問題一直困擾我,在使用視圖集 ViewSet 的時候,有時候序列化模型的讀寫不一定完全一樣,這時候該...

    Jaden 評論0 收藏0
  • 關(guān)于WEB前后端分離的要點總結(jié)(上)

    摘要:前言對于前后端分離大家可能在網(wǎng)上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經(jīng)驗的總結(jié)。今天,我們把這些經(jīng)驗總結(jié)知識點分享給大家,希望可以幫助到大家。添加開啟黑白名單,任選其一。 前言 對于前后端分離大家可能在網(wǎng)上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經(jīng)驗的總結(jié)。今天,我們把這些經(jīng)驗總結(jié)知...

    FullStackDeveloper 評論0 收藏0
  • django rest framework個人學習筆記(一)————Install

    摘要:本文主要是用來記錄自己學習的過程。其中可能會有很多自己的錯誤理解。這里主要會用到的知識有百度百科阮一峰理解架構(gòu)其余請自行百度。所有的全局設(shè)置都放在的字典中。使用標準的權(quán)限,未認證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來記錄自己學習django-rest-framework的過程。其中可能會有很多自己的錯誤理解。 這里主要會用到的知識有 1. [django](https:...

    yuxue 評論0 收藏0
  • django rest framework個人學習筆記(一)————Install

    摘要:本文主要是用來記錄自己學習的過程。其中可能會有很多自己的錯誤理解。這里主要會用到的知識有百度百科阮一峰理解架構(gòu)其余請自行百度。所有的全局設(shè)置都放在的字典中。使用標準的權(quán)限,未認證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來記錄自己學習django-rest-framework的過程。其中可能會有很多自己的錯誤理解。 這里主要會用到的知識有 1. [django](https:...

    yagami 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<