资讯专栏INFORMATION COLUMN

一个关于 Django Rest Framework 的梦

zhisheng / 346人阅读

摘要:昨晚做了一个奇怪的梦。解决方法是创建了一个额外的模型,里包含字段。原文地址一个关于的梦我的博客时空路由器

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。

具体解决方法

定义两个 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() 方法已经创建了用户,所以再次验证的时候会抛出 用户已存在 的异常,所以用 False 忽略这个异常。

返回结果

POST data

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

response data

{
    "username": "username"
}

其他方法也同理。

原文地址:一个关于 Django Rest Framework 的梦
我的博客:时空路由器

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44451.html

相关文章

  • 一个关于 Django Rest Framework 的梦

    摘要:昨晚做了一个奇怪的梦。解决方法是创建了一个额外的模型,里包含字段。原文地址一个关于的梦我的博客时空路由器 Django Rest Framework 这个框架的相关资料确实少,碰到问题比较难以解决,连睡觉都在思考解决的问题。 最近有一个关于 Django Rest Framework 的问题一直困扰我,在使用视图集 ViewSet 的时候,有时候序列化模型的读写不一定完全一样,这时候该...

    Yuanf 评论0 收藏0
  • 一个关于 Django Rest Framework 的梦

    摘要:昨晚做了一个奇怪的梦。解决方法是创建了一个额外的模型,里包含字段。原文地址一个关于的梦我的博客时空路由器 Django Rest Framework 这个框架的相关资料确实少,碰到问题比较难以解决,连睡觉都在思考解决的问题。 最近有一个关于 Django Rest Framework 的问题一直困扰我,在使用视图集 ViewSet 的时候,有时候序列化模型的读写不一定完全一样,这时候该...

    Jaden 评论0 收藏0
  • 关于WEB前后端分离的要点总结(上)

    摘要:前言对于前后端分离大家可能在网上可以找到很多的文章。但是,我们今天分享的文章的英文我们的老师对于前后端的分离问题的多年工作经验的总结。今天,我们把这些经验总结知识点分享给大家,希望可以帮助到大家。添加开启黑白名单,任选其一。 前言 对于前后端分离大家可能在网上可以找到很多的文章。但是,我们今天分享的文章的英文我们的老师对于前后端的分离问题的多年工作经验的总结。今天,我们把这些经验总结知...

    FullStackDeveloper 评论0 收藏0
  • django rest framework个人学习笔记(一)————Install

    摘要:本文主要是用来记录自己学习的过程。其中可能会有很多自己的错误理解。这里主要会用到的知识有百度百科阮一峰理解架构其余请自行百度。所有的全局设置都放在的字典中。使用标准的权限,未认证的用户只读权限不要忘记将添加到你的中。 本文主要是用来记录自己学习django-rest-framework的过程。其中可能会有很多自己的错误理解。 这里主要会用到的知识有 1. [django](https:...

    yuxue 评论0 收藏0
  • django rest framework个人学习笔记(一)————Install

    摘要:本文主要是用来记录自己学习的过程。其中可能会有很多自己的错误理解。这里主要会用到的知识有百度百科阮一峰理解架构其余请自行百度。所有的全局设置都放在的字典中。使用标准的权限,未认证的用户只读权限不要忘记将添加到你的中。 本文主要是用来记录自己学习django-rest-framework的过程。其中可能会有很多自己的错误理解。 这里主要会用到的知识有 1. [django](https:...

    yagami 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<