I have a Flask api server running, worked absolutely fine on 127.0.0.1 right up until I started tinkering with trying to get it working across the LAN. I can see the connections from other devices on the LAN in the debug log, and it is receiving the connections fine, but not serving any pages, only 404, but not even my custom 404. I have enabled Network Discovery, set network to Private, allowed Python through the firewall and tried using a non standard port (51234), disabled firewalls but I still get 404 errors.
127.0.0.1 - - [20/Oct/2022 12:38:00] "GET / HTTP/1.1" 404 -
192.168.1.205 - - [20/Oct/2022 12:38:11] "GET /api/companies?id=1 HTTP/1.1" 404 -
192.168.1.168 - - [20/Oct/2022 12:38:25] "GET / HTTP/1.1" 404 -
192.168.1.113 - - [20/Oct/2022 12:38:41] "GET / HTTP/1.1" 404 -
192.168.1.205 - - [20/Oct/2022 12:43:58] "GET / HTTP/1.1" 404 -
So in order to test it, I went back to basics and only allowed localhost again, and now nothing is working!
* Serving Flask app 'training_server' * Debug mode: on * Running on http://127.0.0.1:5155 Press CTRL+C to quit * Restarting with stat * Debugger is active! 127.0.0.1 - - [20/Oct/2022 12:44:54] "GET / HTTP/1.1" 404 - 127.0.0.1 - - [20/Oct/2022 12:45:12] "GET / HTTP/1.1" 404 - 127.0.0.1 - - [20/Oct/2022 12:45:12] "GET /favicon.ico HTTP/1.1" 404 - 127.0.0.1 - - [20/Oct/2022 12:50:09] "GET / HTTP/1.1" 404 -
from flask import Flask, json, jsonify, request
companies = [{"id": 0, "name": "ACME", "state":"Essex"},
{"id": 1, "name": "Bluebell", "state":"Hertfordshire"}
]
users = [{"company":"ACME","name": "Steve Herbert", "employeeID":"125785", "email":"sherbert@acme.com"},
{"company":"ACME","name": "Steve Herbert", "employeeID":"125785", "email":"sherbert@acme.com"}
]
api = Flask(__name__)
api.config["DEBUG"] = True
api.config['JSON_SORT_KEYS'] = False
api.run(host='127.0.0.1', port=5155)
@api.route('/', methods=['GET'])
def home():
return "<h1>Company Directory</h1><p>This site is a prototype API for company directory listing.</p>"
@api.route('/api/companies/all', methods=['GET'])
def get_companies():
return jsonify(companies)
@api.route('/api/companies', methods=['GET'])
# Check if a param was provided as part of the URL.
# If param is provided, assign it to a variable. If not, display an error in the browser.
def get_company():
print('req' + str(request.args))
print('hello' + next(iter(request.args.keys())))
#print([elem[0:] for elem in request.args.keys()])
if 'id' in request.args:
filter = next(iter(request.args.keys()))
param = int(next(iter(request.args.values())))
elif 'name' in request.args:
filter = next(iter(request.args.keys()))
param = str(next(iter(request.args.values())))
else:
return "Error: No param field provided. Please specify a value."
results = apiParam(param, filter, companies)
return jsonify(results)
def apiParam(param, filter, list):
print('filter' + str(filter))
results = []
# Loop through the data and match results that fit the requested parameter.
for li in list:
if li[filter] == param:
results.append(li)
return results
if __name__ == '__main__':
api.run()