我是django和python的新手,在将django-rest框架集成到我的项目中时遇到了困难。
我已经把我的模型、序列化程序和api整理好了,但当我试图运行服务器时,我会得到一系列错误:
(pyDev)C:\Users\pyDev\smrt>python manage.py运行服务器正在执行系统检查。。。
Unhandled exception in thread started by <function wrapper at 0x0000000003FFD278
>
Traceback (most recent call last):
...
File "C:Python27Libsite-packagesrest_frameworkgenerics.py", line 8, in <m
odule>
from rest_framework import views, mixins
File "C:Python27Libsite-packagesrest_frameworkviews.py", line 14, in <mod
ule>
from rest_framework.response import Response
File "C:Python27Libsite-packagesrest_frameworkresponse.py", line 8, in <m
odule>
from django.core.handlers.wsgi import STATUS_CODE_TEXT
ImportError: cannot import name STATUS_CODE_TEXT
有人知道如何解决这个问题,或者我做错了什么吗?谢谢
- python:2.7.14
- django:1.11.6
- 休息框架:3.1.1
- 虚拟:12.1.1
wpercy正确地指出,STATUS_CODE_TEXT已从django中删除,但我并没有在代码中的任何位置显式调用它。我想这意味着它在rest_framework.generics代码中的某个位置?
有没有可能我使用rest_framework不正确,需要更新我的方法?
编辑:我按照django-rest框架教程从头开始构建了一个全新的项目,我能够很好地返回JSON对象,而不会出现这里描述的错误。。。
编辑:这似乎是一个调用的结果,包括:
rest_framework.generics import ListAPIView
编辑:根据wpercy的建议,我更仔细地查看了回溯,并意识到引用指向了我的根python27\Lib\site packages\rest_framework\response.py,如上文所示,位于第8行,我发现:
from django.core.handlers.wsgi import STATUS_CODE_TEXT
然后在第81行:
return STATUS_CODE_TEXT.get(self.status_code, '')
我该怎么解决这个问题?
编辑:我在链接上发现wpercy&下面的评论发布
链接到相关票证。Jpadilla写道:
总之,我们应该能够做一些类似于response.py:的事情
from django.utils.six.moves.http_client import responses
return responses.get(self.status_code, '')
我提出了这个建议,这是github上的一个封闭项目:
django rest框架的票证状态代码
服务器现在将运行。我不知道我是怎么得到这个旧代码的?也许我应该卸载并重新安装django-rest框架,以确保我拥有最新的,但删除此代码确实解决了问题。
编辑:根据我从另一个问题中得到的答案:"Options"对象没有属性"get_all_related_objects",但我已经在使用Django 1.11事实证明,我使用的是旧版本的rest框架和新版本的django。参见下方标记的答案
此错误是因为您使用的django-rest-framework
版本(v3.1.1)不支持Django版本1.11。django-rest-framework
直到3.7版本才添加对Django v1.11的支持。
使用pip:pip install -U djangorestframework
升级django-rest-framework
django.core.handlers.wsgi.STATUS_CODE_TEXT
在Django 1.9中被删除。
来自Django 1.9发布说明:
django.http.reresponses.REASON_PHRASES和django.core.handlers.wsgi.STATUS_CODE_TEXT已被删除。请改用Python的stdlib:http.client.responses用于Python 3,httplib.response用于Python 2。