我在VMware Player上托管Ubuntu,并且我正在使用eclipse neon,Pydev,Anaconda3与Django合作,它在同一台计算机(Ubuntu)上可以很好地处理请求/响应,但是当我从Windows向托管计算机发送请求时,发生以下情况:
-请求已成功发送。
-未收到回复。
这是我的代码:
在Ubuntu上:
-Django代码:
@api_view(['GET', 'POST'])
def PredictLocations(request):
if request.method == 'GET':
locations = Locations.objects.all()
serilaizer = LocationSerializers(locations, many=True)
return Response(serilaizer.data)
elif request.method == 'POST':
serializer = LocationSerializers(data=request.data)
if serializer.is_valid():
return HttpResponse('Hey')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-发布请求:
import requests,json
url = 'http://localhost:8000/locations/'
payload = {"X": 1.0, "Y": 0.0, "Z": 10.0, "isSafe": 2}
headers = {'content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
print(r.status_code, r.reason, r.text)
在Windows上:
import requests,json
url = 'http://UbuntuIp:8000/locations/'
payload = {"X": 1.0, "Y": 0.0, "Z": 10.0, "isSafe": 2}
headers = {'content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
print(r.status_code, r.reason, r.text)
您认为问题是什么?
最佳答案
我怀疑这是因为您使用的是带有默认参数的django的runserver。这个问题很简单而且很容易解决:默认情况下,djangos runserver绑定到回送接口,而不是您的LAN接口。它将仅响应源自127.0.0.1的请求。但这不是问题,因为runserver
允许您更改接口,甚至可以更改端口。
用ifconfig -a
找到您的ubuntu机器的LAN ip(假设它是192.168.1.10)
直接绑定到它:./manage.py runserver 192.168.1.10:8000
现在,您可能需要在设置中更改ALLOWED_HOSTS,但是为了简化开发,仅使用通配符:ALLOWED_HOSTS = ['*']
可能就足够了。