У меня есть скрипт python flask с JSON, который я разработал. Я пытаюсь вернуть города, используя этот URL: http://127.0.0.1:5000/ресторан/город.
Я получаю эту ошибку:
Internal Server Error The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
Я не уверен, где моя логическая ошибка в моем коде. Кто-нибудь может мне помочь?
Я использую Python 3.8 и флягу.
Вот мой код (json есть в коде):
from flask import Flask, jsonify, request
import json
# from urllib3 import request
# import urllib.request as urllib
app = Flask(__name__)
restaurant = [
{"city": "Al-Khobar",
"details": [
{
"id": 1,
"Area": "Near Corniche",
"Restaurant": "Naranj Damascus Restaurant",
"Street": "Firas Bin Al Nadr Street",
"location link": "https:\/\/www.tripadvisor.com\/Restaurant_Review-g298545-d22895043-Reviews-Naranj_Damascus_Restaurant-Al_Khobar_Eastern_Province.html#MAPVIEW",
"City": "Al Khobar",
"Zip": 34447,
"Country": "Saudi Arabia",
"phone": 966508446622,
"meals": "Breakfast, Lunch, Dinner, Late Night",
"cuisine": "International, Barbecue, Grill, Diner, Middle Eastern",
"price range": "'$25 to $50"
},
{
"id": 2,
"Area": "Near Corniche",
"Restaurant": "The Butcher Shop and Grill",
"Street": "Prince Turkey Street",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298545-d10691837-Reviews-The_Butcher_Shop_and_Grill-Al_Khobar_Eastern_Province.html#MAPVIEW",
"City": "Al Khobar",
"Zip": " ",
"Country": "Saudi Arabia",
"phone": 966138085182,
"meals": "Lunch, Dinner",
"cuisine": "Steakhouse",
"price range": "'$25 to $50"
},
{
"id": 3,
"Area": "Near Corniche",
"Restaurant": "Kosebasi, Al Khobar",
"Street": "Prince Turkey Street",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298545-d9874670-Reviews-Kosebasi_Al_Khobar-Al_Khobar_Eastern_Province.html#MAPVIEW",
"City": "Al Khobar",
"Zip": " ",
"Country": "Saudi Arabia",
"phone": 966138030089,
"meals": "Lunch, Dinner",
"cuisine": "Turkish, Middle Eastern, Barbecue",
"price range": "'$25 to $50"
},
{
"id": 4,
"Area": "Near Corniche",
"Restaurant": "Bun & Patty",
"Street": "Prince Turkey Street Al Yarmouk",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298545-d8054714-Reviews-Bun_Patty-Al_Khobar_Eastern_Province.html#MAPVIEW",
"City": "Al Khobar",
"Zip": 344233213,
"Country": "Saudi Arabia",
"phone": " ",
"meals": "Lunch, Dinner",
"cuisine": "American, Fast Food",
"price range": " "
}
]
},
{"city": "Dammam",
"details": [
{
"id": 5,
"Area": "Near Corniche",
"Restaurant": "Abu Nawas",
"Street": "Al Adama – Prince Mansour Street",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298547-d805085-Reviews-Abu_Nawas-Dammam_Eastern_Province.html#MAPVIEW",
"City": "Dammam",
"Zip": "31461",
"Country": "Saudi Arabia",
"phone": 966138266363,
"meals": " ",
"cuisine": "Lebanese, Mediterranean, Middle Eastern",
"price range": "'$5 to $40"
},
{
"id": 6,
"Area": "Near Corniche",
"Restaurant": "Heritage Village",
"Street": "Prince Turkey Street",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298547-d805123-Reviews-Heritage_Village-Dammam_Eastern_Province.html#MAPVIEW",
"City": "Dammam",
"Zip": " ",
"Country": "Saudi Arabia",
"phone": 96638090000,
"meals": "Lunch, Dinner",
"cuisine": "Middle Eastern, Vegetarian Friendly, Halal",
"price range": "'$10 to $30"
},
{
"id": 7,
"Area": "Near Corniche",
"Restaurant": "Manoosha Alreef",
"Street": "Prince Faisal Bin Fahad Road Khobar North",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298547-d10221865-Reviews-Manoosha_Alreef-Dammam_Eastern_Province.html#MAPVIEW",
"City": "Dammam",
"Zip": "34426",
"Country": "Saudi Arabia",
"phone": 966539222673,
"meals": "Breakfast, Lunch, Dinner",
"cuisine": "Bakeries, Lebanese, Fast Food",
"price range": "'$25 to $50"
},
{
"id": 8,
"Area": "Near Corniche",
"Restaurant": "American, Steakhouse",
"Street": "Prince Mohammad Bin Fahad St.",
"location link": "https://www.tripadvisor.com/Restaurant_Review-g298547-d2659493-Reviews-Steak_House-Dammam_Eastern_Province.html#MAPVIEW",
"City": "Dammam",
"Zip": 11372,
"Country": "Saudi Arabia",
"phone": "96638335468",
"meals": "Lunch, Dinner",
"cuisine": "American, Fast Food",
"price range": "$10 to $35"
}
]
}
]
@app.route('/restaurant')
def hello():
return jsonify(restaurant)
@app.route('/restaurant/city')
def places():
for x in jsonify(restaurant):
if x[jsonify(restaurant)] == 'city':
return x
return {'city': None}
# return jsonify(restaurant['city'])
@app.route('/restaurant', methods=['POST'])
def add_subscription():
subscription = request.get_json(force=True)
restaurant.append(subscription)
return {'id': len(restaurant)}, 200
@app.route('/restaurant/<int:index>', methods=['PUT'])
def update_subscription(index):
subscription = request.get_json(force=True)
restaurant[index] = subscription
return jsonify(restaurant[index]), 200
@app.route('/restaurant/<int:index>', methods=['DELETE'])
def delete_subscription(index):
restaurant.pop(index)
return 'None', 200
app.run()
несколько проблем с кодом.
restaurant
не нужно "jsonified", вы можете использовать ее как есть./restaurant/city
должен иметь city
в качестве переменной от пользователя, для этого вам нужно объявить декоратор, как показано ниже. Также теперь «город» также является аргументом метода:@app.route('/restaurant/<city>')
def places(city):
а затем я предполагаю, что вы пытаетесь сопоставить переменную city
с городом из словарей, поэтому весь код станет таким:
@app.route('/restaurant/<city>')
def places(city):
for x in restaurant:
if x["city"] == city:
return x
return {'city': None}
чтобы протестировать код, вы должны использовать URL-адрес, например: http://127.0.0.1:5000/ресторан/Даммам
Запуск
app.run(debug=True)
также помогает отладке