【问题标题】:requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /api/1/requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): 最大重试次数超过了 url: /api/1/
【发布时间】:2019-09-24 09:19:50
【问题描述】:

我正在尝试在 DjangoPython 文件之间进行通信,但出现以下错误:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): 最大重试次数超过 url: /api/1/ (由 NewConnectionError(': 无法建立新连接: [ WinError 10061] 由于目标机器主动拒绝,无法建立连接'))

我在Django 应用程序中创建了一个名为test.py 的Python 文件并尝试在它们之间进行通信。我的Python 文件包含以下代码:

import requests
BASE_URL='http://127.0.0.1:8000/'
ENDPOINT='api/'
def get_resource(id):
    resp=requests.get(BASE_URL+ENDPOINT+id+'/')
    print(resp.status_code)
    print(resp.json()) 
id=input("Enter some ID: ")
get_resource(id)

Models.py 包含:-

from django.db import models

# Create your models here.
class Employee(models.Model):
    eno=models.IntegerField()
    ename=models.CharField(max_length=70)
    esal=models.FloatField()
    eaddr=models.CharField(max_length=100)

Admin.py 包含:-

from django.contrib import admin
from testapp.models import Employee
# Register your models here.
class EmployeeAdmin(admin.ModelAdmin):
    list_display=  ['id','eno','ename','esal','eaddr']

admin.site.register(Employee,EmployeeAdmin)

我的Views.py 包含:-

from django.shortcuts import render
from django.views.generic import View
from testapp.models import Employee
import json
from django.http import HttpResponse


class EmployeeDetailCBV(View):
def get(self,request,id,*args,**kwargs):
    emp = Employee.objects.get(id=id)  
    emp_data = {'eno':emp.eno , 'ename':emp.ename , 'esal':emp.esal , 'eaddr':emp.eaddr} 
    json_data=json.dumps(emp_data)
    return HttpResponse(json_data , content_type='application/json')

urls.py 文件包含:-

from django.contrib import admin
from django.urls import path
from testapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/(?P<id>\d+)/$', views.EmployeeDetailCBV.as_view()),
]

得到类似的错误:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): 最大重试次数超过 url: /api/1/ (由 NewConnectionError(': 无法建立新连接: [ WinError 10061] 由于目标机器主动拒绝,无法建立连接'))

请帮助我。谢谢技术人员....

【问题讨论】:

  • 您在 URL 中遗漏了一个斜杠。
  • 127.0.0.8000api != 127.0.0:80/api/

标签: python django api django-rest-framework


【解决方案1】:

我找到了失败背后的真正原因。我只从 1 个终端运行了 py test.py 来访问 python 文件。当时服务器没有运行,因此无法进行通信。 然后我打开一个单独的终端并运行开发服务器,现在我的 Python 文件能够与 Django 文件通信。 现在它运行良好。

【讨论】:

  • 糟糕!也忘了先启动dev-server。谢谢@Chandan
【解决方案2】:

试试这个:

import requests

# BASE_URL='http://127.0.0.8000' <<< Url with port malformed
BASE_URL='http://127.0.0.1:8000'
ENDPOINT='api/'
def get_resource():
    # resp=requests.get(BASE_URL+ENDPOINT)  <<< Request url malformed
    resp=requests.get(BASE_URL+"/"+ENDPOINT)
    print(resp.status_code)
    print(resp.json())
get_resource()

【讨论】:

  • 是的,我忘了把 / 放在 8000 之后。现在我已经更正了它,但再次显示相同的错误
  • 感谢您指出这一点。我的错。更改了它,但再次得到同样的错误
  • 哦,对了,最后一件事:http://127.0.0:8000 -> http://127.0.0.1:8000。太明显了,我看不到!
  • 看来我喝醉了,想写代码。很抱歉错过了。改了,但不知道为什么会一次又一次地抛出同样的错误
  • 当您从浏览器转到http://127.0.0.1:8000/api 时会发生什么?
【解决方案3】:

遇到类似问题,更改端口号解决了问题。

【讨论】:

  • 如果您不打算给出答案,只需转到“添加评论”
【解决方案4】:

请检查您的端口一次 就我而言,我遇到了端口问题,我使用的是 8525 端口,而不是浏览 8525,而是使用 8000 浏览

【讨论】:

    【解决方案5】:

    您只需要打开单独的终端并运行您的 python 代码,然后

    确保您的服务器当时正在运行

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 2020-07-19
    • 2019-10-30
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多