在调试时遇到一些麻烦。我总是在第一次启动我的应用程序时收到此错误,然后在以后间歇性地启动。有人可以通过一些调试技术来帮助我吗?我尝试使用代理检查器-无济于事,我看不到任何有用的东西。我尝试了有关在Django设置中设置SITE_URL的建议。我尝试过在没有http://的情况下,在没有端口的情况下进行尝试...这是无用的错误:
Exception happened during processing of request from ('127.0.0.1', 57917)
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 650, in process_request_thread
self.finish_request(request, client_address)
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 720, in __init__
self.handle()
File "/Users/ryan/.local/share/virtualenvs/portal-2PUjdB8V/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 171, in handle
self.handle_one_request()
File "/Users/ryan/.local/share/virtualenvs/portal-2PUjdB8V/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 179, in handle_one_request
self.raw_requestline = self.rfile.readline(65537)
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [Errno 54] Connection reset by peer
即使重新设置此连接,该应用程序似乎仍能正常运行,但它一直让我疯狂尝试调试。
答案 0 :(得分:5)
如果收藏夹图标为.png而不是.ico,则会看到相同的行为。
此外,与其他网站上看到的建议相反,将Python降级到v3.6并不能解决问题。 screenshot of error w. png favicon
似乎是Django问题,在以后的Django版本中可能会永久修复。
在https://bugs.python.org/issue27682#msg348302之后,我进行了如下所示的更改:
然后我用ConnectionAbortedError替换了BrokenPipeError。这似乎可以处理异常。
答案 1 :(得分:4)
FFS ...太蠢了。我注意到,它在找不到图标后一直处于重置状态,因此我添加了一个图标。即使我从未明确加载图标,django似乎也尝试从项目的根目录加载默认图标。对于从事该项目的其他开发人员。奇怪的。 (出于完整性考虑)如果有人偶然发现此问题,我会使用favicon io来编写一个简单的文本。然后我像这样将其加载到我的html中:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="shortcut icon" href="{% static 'images/favicon.ico' %}" />
...
请务必在设置中正确设置静态路径。
答案 2 :(得分:1)
我遇到了同样的问题 ConnectionResetError: [Errno 54] Connection reset by peer
。
就我而言,问题是尝试通过带有 debug settings to False
的开发服务器提供静态文件,只有在设置文件中将 debug
设置为 True
时,开发服务器才能提供静态文件。< /p>
在我的设置文件中替换
DEBUG = False
与
DEBUG = True
在那之后,我重新启动了我的开发服务器,它对我有用!
答案 3 :(得分:0)
我从开发切换到生产时也遇到了这个问题。
在我执行 collectstatic 后它又正常工作了,我的猜测是它缺少用于生产的静态目录路径
在切换到生产环境之前执行此操作
<块引用>python manage.py collectstatic
答案 4 :(得分:0)
我在我的项目中遇到了同样的问题。也许这篇文章可以帮助某人。
就我而言,问题是我用 onclick
从按钮调用函数,如下所示:
<a class="btn btn-warning" onclick="submitData();">Caption</a>
我将其更改为更好的方式:
<button class="btn btn-warning" id="button-action">Caption</button>
然后处理点击:
document.getElementById('button-action').addEventListener('click', function(e){
submitData()
})
答案 5 :(得分:0)
目前的答案都不适合我。这就是我在 MacOS 上为 Django 3 开发期间使错误消失的方法(在其他版本上未经测试)。
在您的项目应用之一中创建自定义 runserver 管理命令,该命令仅在 DEBUG==True
和您使用 Mac 时有所不同。特别注意Command.get_handler
:
#myapp/management/commands/runserver.py
import platform
import django.core.servers.basehttp
from django.conf import settings
from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand
from django.core.servers.basehttp import ServerHandler
def handle_one_request(self):
"""
Exact copy of django.core.servers.WSGIRequestHandler.handle_one_request except it
Completely ignores "ConnectionResetError: [Errno 54] Connection reset by peer"
Which seems to be only noise on MacOS.
"""
try:
self.raw_requestline = self.rfile.readline(65537)
except ConnectionResetError:
return
if len(self.raw_requestline) > 65536:
self.requestline = ""
self.request_version = ""
self.command = ""
self.send_error(414)
return
if not self.parse_request(): # An error code has been sent, just exit
return
handler = ServerHandler(self.rfile, self.wfile, self.get_stderr(), self.get_environ())
handler.request_handler = self # backpointer for logging & connection closing
handler.run(self.server.get_app())
class Command(RunserverCommand):
def get_handler(self, *args, **options):
if settings.DEBUG and platform.platform().upper().startswith("DARWIN"):
# patch the offending code
django.core.servers.basehttp.WSGIRequestHandler.handle_one_request.__code__ = handle_one_request.__code__
return super().get_handler(*args, **options)
并将您的应用添加到 INSTALLED_APPS
上方的 django.contrib.staticfiles
:
INSTALLED_APPS = [
. . .
"myapp",
"django.contrib.staticfiles",
. . .
]