0
我有一個Python API,我試圖調用並打印給定ip範圍的城市名稱。 Python API中看起來如下:從另一個程序調用python API
import datetime as dt
from flask import Flask, jsonify, request
class IpRangeSearch:
RANGES = {
'Tokyo': [
{'start': '10.10.0.0', 'end': '10.10.255.255'},
{'start': '192.168.1.0', 'end': '192.168.1.255'},
],
'Paris': [
{'start': '10.12.0.0', 'end': '10.12.255.255'},
{'start': '172.16.10.0', 'end': '172.16.11.255'},
{'start': '192.168.2.0', 'end': '192.168.2.255'},
]
}
def __init__(self):
pass
def get_city(self, ip):
for city, ipranges in self.RANGES.items():
for iprange in ipranges:
if ip >= iprange['start'] and ip <= iprange['end']:
return city
app = Flask(__name__)
ip_range_search = IpRangeSearch()
@app.route('/ip_city/<ip>')
def ip_city(ip):
return jsonify({'city': ip_range_search.get_city(ip)})
if __name__ == '__main__':
app.run(host='0.0.0.0')
我打電話從其他Python程序的API:
import json
import oauth2 as oauth
import requests
response = requests.get("http://0.0.0.0:5000/ip_city/10.12.1.1")
print(response.status_code)
print(response.content)
理想情況下,上面的代碼應該打印:
200
{
"city": Paris
}
但其打印:
200
{
"city": null
}
我是n不知道爲什麼,但是當我嘗試運行API代碼將json結構解析爲獨立函數時 - 代碼以正確的格式打印輸出。
我在做什麼錯?
我覺得'get_city()'想要_return_城市,而不是_print_它。 –
你還沒有處理它找不到條目的情況。在這種情況下,您需要返回一個值。如果您希望在您的案例中找到值,則需要調試您的功能。 –
我在shell中運行了這段代碼,它確實返回了'Paris',所以基本代碼看起來很好。也許網站腳手架存在一些問題?嘗試將ip添加到返回的jsonify字典中,以便您可以看到它顯示並確保正確接收它。 –