django rest框架没有显示utf8单词

时间:2015-12-20 12:11:25

标签: django django-rest-framework

根据这个post,我想为我的Android应用程序做一个休息api。但是当我想从django休息框架中给json时,它不支持utf8单词。 这是截图:

enter image description here

这是我的模特:

    from __future__ import unicode_literals

from django.db import models
class News(models.Model):
    title = models.CharField(max_length=255)
    created = models.DateTimeField('auto_now_add = True')
    active = models.BooleanField()

    def __str__(self):
        return  self.title.encode('utf8')

这是我的观点:

from django.shortcuts import render
from rest_framework import viewsets
from rest_framework import permissions
from news.models import News
from news.serializers import NewsSerialzer

class NewsViewSet(viewsets.ModelViewSet):
    queryset = News.objects.all()
    serializer_class = NewsSerialzer

这是我的序列化器:

from news.models import News
from rest_framework import serializers

class NewsSerialzer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = News
        fields  = ('title' , 'active' , 'created')

我使用django rest framework 3.3.2

3 个答案:

答案 0 :(得分:1)

问题在于self.title.encode('utf8')。好像你正在使用python 2. encode()函数将字符串转换为字节。这就是为什么标题变得怪异。由于您已从unicode_literals导入__future__,因此所有字符串都将是unicode。只需返回可解决问题的self.title ..有关详细信息https://docs.python.org/2/howto/unicode.html

答案 1 :(得分:1)

确保您为http标头分配正确的编码,以便浏览器识别数据编码。 下面的示例显示了如何使用Firefox中的Developer Tool识别它。 Chrome中存在相同的工具。如果您显然不会在标头中分配编码,那么浏览器将尝试访客或使用默认值来编码来自服务器的数据。

enter image description here

答案 2 :(得分:0)

无论如何,当我在chrome +33中看到json时,响应没有显示utf8字,但是当我在Firefox中看到响应时,每件事情都是好的,当我解析{{1 }} 一切都好 。