django - UnicodeDecodeError : 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128) when using tastypie

标签 django tastypie

我正在用Django 1.4测试tastypie 1.9,以为我的网站创建一个基本的REST API。我正在按照文档中的最初步骤进行操作,在这里我陷入了困境。

我在全局范围内运行Django,并且未在此特定实现中使用virtualenv。它在浏览器中显示A server error occurred. Please contact the administrator.。我只在Django服务器中运行此程序。

当我尝试访问http://127.0.0.1:8000/api/sessionuserround/?format=json时,这是终端中出现的错误消息

[20/Jun/2013 10:26:19] "GET /api/sessionuserround/?format=json HTTP/1.1" 500 99752
Traceback (most recent call last):
  File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 146, in get_response
    response = debug.technical_404_response(request, e)
  File "/usr/local/lib/python2.7/site-packages/django/views/debug.py", line 443, in technical_404_response
    'reason': smart_str(exception, errors='replace'),
  File "/usr/local/lib/python2.7/site-packages/django/utils/encoding.py", line 116, in smart_str
    return str(s)
  File "/usr/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 235, in __repr__
    return smart_str(u'<%s %s (%s:%s) %s>' % (self.__class__.__name__, self.urlconf_name, self.app_name, self.namespace, self.regex.pattern))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128)
[20/Jun/2013 10:26:40] "GET /api/sessionuserround/?format=json HTTP/1.1" 500 59
Traceback (most recent call last):
  File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 146, in get_response
    response = debug.technical_404_response(request, e)
  File "/usr/local/lib/python2.7/site-packages/django/views/debug.py", line 443, in technical_404_response
    'reason': smart_str(exception, errors='replace'),
  File "/usr/local/lib/python2.7/site-packages/django/utils/encoding.py", line 116, in smart_str
    return str(s)
  File "/usr/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 235, in __repr__
    return smart_str(u'<%s %s (%s:%s) %s>' % (self.__class__.__name__, self.urlconf_name, self.app_name, self.namespace, self.regex.pattern))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128)

这些是与我相关的文件:

sal(我的应用名称)中存在的api.py:
from tastypie.resources import ModelResource
from sal.models import SessionUserRoundMap


class SessionUserRoundResource(ModelResource):

    class Meta:
        queryset = SessionUserRoundMap.objects.all()

这是urls.py:
from django.conf.urls.defaults import *
from sal.api import SessionUserRoundResource

sessionuserround_resource = SessionUserRoundResource

urlpatterns = patterns('',
                      (r'ˆapi/', include(sessionuserround_resource.urls)),
                       )

models.py中的相关代码:
class SessionRoundMap(models.Model):

    session_id = models.ForeignKey(Session)
    num_of_rounds = models.IntegerField()

    def __unicode(self):
        text = "Session ID: " + str(self.session_id)
        return text

class SessionUserRoundMap(models.Model):
    user_id = models.ForeignKey(BssUser)
    session_id = models.ForeignKey(Session)
    round_no = models.IntegerField()

    def __unicode__(self):
        return self.user_id + ' ' + self.session_id + ' ' + round_no

settings.py中的相关代码:
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    'admin',
    'tastypie',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

现在,我的views.py为空。

这是requirements.txt:
Django==1.4.5
defusedxml==0.4.1
distribute==0.6.40
django-tastypie==0.9.15
dulwich==0.9.0
hg-git==0.4.0
lxml==3.2.1
mercurial==2.6.2
mimeparse==0.1.3
python-dateutil==1.5
python-mimeparse==0.1.4
vboxapi==1.0
virtualenv==1.9.1
wsgiref==0.1.2

我怎么解决这个问题?请帮忙!

最佳答案

由于出现了一些错误,因为我的模型中的某些模型在实例化时未返回正确的unicode编码响应。

这是因为我的models.py中有错字:

class SessionRoundMap(models.Model):

    session_id = models.ForeignKey(Session)
    num_of_rounds = models.IntegerField()

    def __unicode(self):
        text = "Session ID: " + str(self.session_id)
        return text

应该是这样的:
class SessionRoundMap(models.Model):

    session_id = models.ForeignKey(Session)
    num_of_rounds = models.IntegerField()

    def __unicode__(self):
        text = "Session ID: " + str(self.session_id)
        return text

unicode方法编写不正确,导致此错误。

关于django - UnicodeDecodeError : 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128) when using tastypie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17205692/

相关文章:

python - django admin - 选择反向外键关系(不是创建,我想添加可用)

python - Tastypie apply_filters 具有不同的

使用简单 View 的 django RESTful API

django - 如何使用 OAuth2 创建用户?

python - 如何在资源中搜索嵌套值(tastypie json)

适用于 HTTP 和 HTTPS 的 Django CSRF

django - 检查 django 中是否存在数据的最佳方法是什么?

Django CBV CreateView - 从 CreateView 重定向到最后一页

django - 在 AWS 中运行 Django Python 服务器

python使用内部类动态创建类