【问题标题】:Problems with API call in Django applicationDjango 应用程序中的 API 调用问题
【发布时间】:2017-07-27 13:17:07
【问题描述】:

我正在 Django 应用程序中进行简单的 API 调用,但遇到了一些问题

这里是ajax调用:

$.ajax({
    type: "GET",
    url: "/query/",
    success: function (data) {
        alert(data);
    }
});

这里是调用 API 的函数:

def query(request):
    response = requests.get("http://api.open-notify.org/iss-now.json")
    return JsonResponse(response.status_code, safe=False)

这仅在每隔一次触发时才有效,一次失败然后一次成功。失败时不会捕获异常。以下是失败后输出窗口中显示的内容。

The thread 0x2008 has exited with code 0 (0x0).
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 138, in run
self.finish_response()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 180, in 
finish_response
self.write(data)
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 274, in write
self.send_headers()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 332, in 
send_headers
self.send_preamble()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 255, in 
send_preamble
('Date: %s\r\n' % format_date_time(time.time())).encode('iso-8859-1')
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 453, in 
_write
result = self.stdout.write(data)
File "C:\Program Files\Python36\lib\socketserver.py", line 775, in write
self._sock.sendall(b)
ConnectionAbortedError: [WinError 10053] An established connection was 
aborted by the software in your host machine
[27/Jul/2017 13:56:15] "GET /query/ HTTP/1.1" 500 59

Exception happened during processing of request from ('127.0.0.1', 56126)
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 138, in run
self.finish_response()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 180, in 
finish_response
self.write(data)
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 274, in write
self.send_headers()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 332, in 
send_headers
self.send_preamble()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 255, in 
send_preamble
('Date: %s\r\n' % format_date_time(time.time())).encode('iso-8859-1')
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 453, in 
_write
result = self.stdout.write(data)
File "C:\Program Files\Python36\lib\socketserver.py", line 775, in write
self._sock.sendall(b)
ConnectionAbortedError: [WinError 10053] An established connection was 
aborted by the software in your host machine

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 141, in run
self.handle_error()
File "D:\Dropbox\Django Projects\DjangoMOA\environment\lib\site-
packages\django\core\servers\basehttp.py", line 88, in handle_error
super(ServerHandler, self).handle_error()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 368, in 
handle_error
self.finish_response()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 180, in 
finish_response
self.write(data)
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 274, in write
self.send_headers()
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 331, in 
send_headers
if not self.origin_server or self.client_is_modern():
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 344, in 
client_is_modern
return self.environ['SERVER_PROTOCOL'].upper() != 'HTTP/0.9'
TypeError: 'NoneType' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Program Files\Python36\lib\socketserver.py", line 639, in 
process_request_thread
self.finish_request(request, client_address)
File "C:\Program Files\Python36\lib\socketserver.py", line 361, in 
finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Program Files\Python36\lib\socketserver.py", line 696, in __init__
self.handle()
File "D:\Dropbox\Django Projects\DjangoMOA\environment\lib\site-
packages\django\core\servers\basehttp.py", line 155, in handle
handler.run(self.server.get_app())
File "C:\Program Files\Python36\lib\wsgiref\handlers.py", line 144, in run
self.close()
File "C:\Program Files\Python36\lib\wsgiref\simple_server.py", line 35, in 
close
self.status.split(' ',1)[0], self.bytes_sent
AttributeError: 'NoneType' object has no attribute 'split'

The thread 0x420 has exited with code 0 (0x0).

我已经在 postman 中测试了 URL,并且每次都收到响应,没有任何问题。

任何建议或想法将不胜感激。

【问题讨论】:

  • 尝试响应。['status_code']

标签: python ajax django


【解决方案1】:

设法查明真相。看起来页面正在重新加载并导致“ConnectionAbortedError”。

我将调用嵌套在一个需要

的 .submit 函数中
event.preventDefault();

最后添加。完整的工作代码现在看起来像这样。

$("#form").submit(
    function () {
        $.ajax({
            type: "GET",
            url: "/query/",
            success: function (data) {
                alert(data);
            }
        });
        event.preventDefault();
    }

);

希望这对其他人有所帮助:)

【讨论】:

  • 我不知道我需要多长时间才能看到这个问题的 JavaScript,我发誓这是来自 Python。这正是我所需要的完全相同的问题!!!感谢您回来并发布您的答案/修复!我为此挠了好几个小时!
猜你喜欢
  • 2021-06-18
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 2016-10-21
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多