Django REST教程DEBUG = FALSE错误

时间:2015-06-15 01:02:14

标签: python django django-rest-framework

我试图通过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;在他们自己的项目的背景下设置,但坦率地说,答案是我的头脑。有人可以在本教程的上下文中解释一下吗?

非常感谢!

1 个答案:

答案 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状态代码表示服务器端出现问题,因此服务器无法正常响应请求,即您的代码中有错误。