當前位置:
首頁 > 最新 > 一个关于 Django Rest Framework 的梦

一个关于 Django Rest Framework 的梦

Django Rest Framework 这个框架的相关资料确实少,碰到问题比较难以解决,连睡觉都在思考解决的问题。

最近有一个关于 Django Rest Framework 的问题一直困扰我,在使用视图集 ViewSet 的时候,有时候序列化模型的读写不一定完全一样,这时候该如何输出呢?

所谓日有所思,夜有所梦。昨晚做了一个奇怪的梦。

梦的大概是这样的:

我发现了 Django Rest Framework 在 Response 的时候可以定义一个 Response Serializer Model,这样就可以省去一些不必要显示的字段。

我将信将疑,今天进它的官网查找了一下到底有没有这个 API,发现确实.......果然.........没有。

不过按这个思路还是给了我解决方法,可能这个解决方法有些糙。

比如用户信息的注册和获取,包含以下字段:

username

password

注册的时候需要 username 、 password,然而获取的时候只需要 username 不需要 password,而 serializer 的 fields 又是定义了 username 、 password,这样很矛盾。

解决方法是创建了一个额外的 serializer 模型,fields 里包含 username 字段。然后重写 create 方法,在 Response 之前将原先的序列化模型转换成自定义的序列化模型,然后 Response。

具体解决方法

定义两个 序列化模型,一个用于注册,一个用于显示

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 的 方法里 raise_exception 必须为 , 因为 方法已经创建了用户,所以再次验证的时候会抛出用户已存在的异常,所以用 忽略这个异常。

返回结果

POST data

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

response data

{ "username": "username" }

其他方法也同理。

原文地址:一个关于 Django Rest Framework 的梦

我的博客:时空路由器

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 推酷 的精彩文章:

真的能原生4K?Xbox One X實際性能測試!
網站經驗談:網站被降權怎麼辦 如何恢復權重
如何掌握所有的程序語言
全局單例換一種姿勢使用
YI Tunnel「看」一眼即可結賬,傳統零售業迎來「無人店」時代

TAG:推酷 |

您可能感興趣

Django Channel處理Websocket鏈接
你可能不知道的 Django Rest Framework 的兩個新特性
Django Admin的新皮膚,Google Material 風格皮膚
django框架:HttpResponse對象
Nginx+uwsgi部署Django應用
使用Centos7.5+Nginx+Gunicorn+Django+Python3部署blog項目
Django Channels實時推送
Cobbler與Django結合
如何 Docker 化 Python Django 應用程序
Django Nginx+uwsgi 安裝配置
在Django中優化 Postgres 全文搜索
python後台架構Django——連接讀寫mysql資料庫
Localhost環境下使用Django send_mail發送郵件-以QQ和163郵箱為例
python-django 項目部署,不難!
在 Django中使用 Redis和Celery處理非同步任務
Django Channels 2.0 發布
celery4+django2定時任務
使用Django連接Oracle 11g資料庫
Python以及Django最小白的環境部署
Linux+Nginx+Uwsgi+Django 搭建單服務實現多域名訪問