Как заставить этот API возвращать значение flask python

У меня есть скрипт 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()

Запуск app.run(debug=True) также помогает отладке

Wisa 09.04.2022 23:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

несколько проблем с кодом.

  1. предоставленную вами переменную restaurant не нужно "jsonified", вы можете использовать ее как есть.
  2. путь /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/ресторан/Даммам

Другие вопросы по теме