javascript - Django Rest 框架正在从数据库中返回 'u 前缀到 Angular

标签 javascript python django angularjs django-rest-framework

我正在使用 Django Rest Framework 和 Angularjs 创建一个网站,该网站获取发型师的信息并将其保存到数据库中。还有另一个页面可以从数据库中提取该信息并将其显示在个人资料页面上。

我遇到的问题是,当我调用该数据时,它返回 unicode 前缀 'u,而 javascript 不允许我使用它。

这是我得到的返回:

{"stylist":"{u'email': u'chris@internet.com', u'profession': {u'esthetician': True, u'hair_stylist': True}, u'name': u'Chris', u'certification': u'no'}","created_at":"2015-05-04T19:27:19.482058Z","updated_at":"2015-05-04T19:27:19.511937Z"}

我的模型:

class StylistSubmission(models.Model):
    stylist = models.CharField(max_length=2500, null=True, blank=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.stylist

我的序列化器.py:

class StylistSerializer(serializers.ModelSerializer):
    class Meta:
        model = StylistSubmission
        fields = (
            'stylist',
            'created_at',
            'updated_at'
        )
        read_only_fields = ('created_at', 'updated_at')

我的观点.py:

class StylistViewSet(viewsets.ModelViewSet):
    queryset = StylistSubmission.objects.order_by('-created_at')
    serializer_class = StylistSerializer

    def perform_create(self, serializer):
        instance = serializer.save()
        post_save.send(sender=self.__class__, stylist=instance.stylist)
        return super(StylistViewSet, self).perform_create(serializer)

这几天我一直在用头撞墙,试图解决这个问题。我对 django Rest 框架很陌生,对 Angular 也很陌生,所以我可能会遗漏一些明显的东西。任何帮助将不胜感激。

最佳答案

考虑到预期的关注点分离,我建议让 Perform_create 函数专注于“保存”模型。

create() 函数(来自 CreateModelMixin 父级)是负责生成 HTTP 响应的函数,因此这是渲染和发出响应的更好位置,对吗?

    from rest_framework.renderers import JSONRenderer

    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)

        return Response(JSONRenderer.render({'stylist': serializer.data}), status=status.HTTP_201_CREATED, headers=headers)

PS:通常,RESTful 端点只会发出 Stylist 对象,而不是将其包装在另一个键(“stylist”)内。由于它是对 create POST 的响应,因此暗示返回的对象将是 Stylist 对象。

关于javascript - Django Rest 框架正在从数据库中返回 'u 前缀到 Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30038541/

相关文章:

python - 类型提示、与前向引用的联合

python - python 中的 if/else

python - PostgreSQL 和 Django 查询

html - EmailMultiAlternatives 在 django 中发送带有图像的邮件时添加 3D

Django - 从每个相册中随机选择一张照片

javascript - 在大型系统中附加事件处理程序的最佳实践

javascript - 将键值对放入对象中 - 为什么它按 # 对条目进行排序?

javascript - 数据层引用删除

python - C 程序内存违规依赖于 std::cout (?)

javascript - 如何从JS中的数组中删除特定字符?