我试图通过tutorial学习使用django REST框架。我已经进入了#34;测试我们对Web API的第一次尝试"。
当我启动服务器时,我得到:
System check identified no issues (0 silenced).
June 15, 2015 - 00:34:49
Django version 1.8, using settings 'tutorial.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[15/Jun/2015 00:35:17]"GET /snippets/ HTTP/1.1" 500 74404
但是,当我执行下一步时:/Library/Frameworks/Python.framework/Versions/3.3/bin/http http://127.0.0.1:8000/snippets/
我得到一个错误,其中包括:
You're seeing this error because you have <code>DEBUG = True</code> in your
Django settings file. Change that to <code>False</code>, and Django will
display a standard page generated by the handler for this status code.
所以,当我更改settings.py时说:
DEBUG = False
ALLOWED_HOSTS = ['*']
然后启动服务器,发生这种情况: 在第一个终端窗口中:
^$ python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
June 15, 2015 - 00:52:29
Django version 1.8, using settings 'tutorial.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
然后在第二个终端窗口中:
$ /Library/Frameworks/Python.framework/Versions/3.3/bin/http http://127.0.0.1:8000/snippets/
HTTP/1.0 500 Internal Server Error
Content-Length: 59
Content-Type: text/plain
Date: Mon, 15 Jun 2015 00:52:42 GMT
Server: WSGIServer/0.2 CPython/3.3.5
A server error occurred. Please contact the administrator.
同时,在第一个终端窗口中,有一堆结尾的内容:
File "/tutorial/tutorial/urls.py", line 9, in <module>
url(r'^admin/', include(snippets.urls)),
NameError: name 'snippets' is not defined
我不明白如何让它发挥作用。我看到至少有一个人问过类似的问题&#34; DEBUG = False&#34;在他们自己的项目的背景下设置,但坦率地说,答案是我的头脑。有人可以在本教程的上下文中解释一下吗?
非常感谢!
答案 0 :(得分:2)
此错误:
File "/tutorial/tutorial/urls.py", line 9, in <module>
url(r'^admin/', include(snippets.urls)),
NameError: name 'snippets' is not defined
发生因为必须引用snippets.urls
。请参阅示例here:
urlpatterns = [
url(r'^', include('snippets.urls')),
]
如图here所示,你可以这样写:
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),
]
注意第二个include()不包含带引号的参数。这是允许的,因为import语句使一个名为admin
的变量可用,它有一个名为site
的属性,该属性又有一个名为urls
的属性;无论admin.site.urls
的值是什么,它都是include()函数的有效参数。
但如果你写:
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(snippets.urls))
]
然后python四处寻找一个名为snippets的变量,因为它无法找到一个,python会给你错误:
NameError:name&#39; snippets&#39;未定义
...
您看到此错误,因为您有
DEBUG = True
你的Django设置文件。将其更改为False
,然后 Django将显示由处理程序生成的标准页面 这个状态代码。
在短语中将显示处理程序为此状态代码生成的标准页面,状态代码表示错误代码,这意味着你仍然会得到错误,但你不会得到任何错误的描述。当您处于生产模式,即非开发模式时,您不希望向不知道其含义的用户显示错误消息,并且无论如何都无法纠正错误。因此,在生产模式中,您可以设置DEBUG=False
。
但是,在开发时,您需要在出现错误时显示详细的错误消息。否则,您将看到一个显示以下内容的网页:
抱歉出错了:500错误。再见。
在追踪错误方面绝对没有帮助。离开Debug=True
。
当我启动服务器时,我得到:
System check identified no issues (0 silenced). June 15, 2015 - 00:34:49 Django version 1.8, using settings 'tutorial.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [15/Jun/2015 00:35:17]"GET /snippets/ HTTP/1.1" 500 74404
你没有必要继续前进,因为那里的最后一行表示有错误。 GET请求响应的状态代码为500.如果您在Google搜索 http状态代码,您将了解到500状态代码表示服务器端出现问题,因此服务器无法正常响应请求,即您的代码中有错误。