Неполный ответ Flask, полученный от приложения

#python #flask

#python #flask

Вопрос:

Я изучаю flask и создал свое первое приложение — чтобы продолжить работу с ним, я решил разместить его.

Хотя приложение отлично работает на моем КОМПЬЮТЕРЕ — оно прерывается на сервере, но только с некоторыми определенными переданными параметрами (это работает для большинства входных данных формы):

Например, для большинства опубликованных значений приложение возвращает правильный фрейм данных, но для некоторых (я пробовал, как 50 и 2, разбить код, возвращающий неполный ответ, полученный от приложения)

Вот два связанных app.routes:

 @app.route("/searchcharacter", methods=["POST", "GET"])
def charactersearch():
    if request.method == "POST":
        character_name = request.form["nm"]
        character_name = character_name.replace(" ", " ")
        print(character_name) 
        return redirect(url_for("character_found", character=character_name))
    else:    
        return render_template("searchcharacter.html")


@app.route("/<character>/")
def character_found(character):
    character = character.replace(" ", " ")
    print("Character right before query: "   character)
    df_character = pd.read_sql("""SELECT * FROM auction_history where character_name = %(character)s"""
                               , con=db_connection,params={'character': character})     
    df = df_character[['character_name','auction_start','auction_end','win_lose','minimum_bid','winning_bid','level','vocation',
                       'sex','server','axe_fighting','sword_fighting','club_fighting','dist_fighting','fishing', 'magic_level','shielding']]
    df.columns = ['Name', 'Auction Start', 'Auction End', 'Auction Successful?', 'Min Bid', 'Winning Bid', 'Level', 'Vocation', 'Sex', 
                  'Server', 'Axe', 'Sword', 'Club', 'Distance', 'Fishing', 'Magic Level', 'Shielding']
    
    df['Auction Successful?'] = df['Auction Successful?'].replace([1],'Yes')
    df['Auction Successful?'] = df['Auction Successful?'].replace([0],'No')
    print(df_character)
    if df_character.empty:
        return render_template("characternotfound.html", character=character)
    else:
        return render_template("characterfound.html", character=character,   tables=[df.to_html(classes='data')], titles=df.columns.values)
 

Я просмотрел все, что могло прийти мне в голову… но я удивлен, почему он работает для одних входных данных и не работает для других.
Примеры входных данных, которые не работают:
Чамства не знай, Бурк,
безликий

Примеры, которые работают: Mac Nekro, Japatrocinador Da Roleta, Tirinha Malfada

Если это поможет, веб-сайт уже размещен и запущен по адресу: http://tanalyst.pl/searchcharacter

Я был бы очень признателен за любую помощь … это просто ломает мне голову 🙂 Я попытался просмотреть журналы, и мне кажется, что для неработающих входных данных flask не перенаправляет должным образом?

На что еще я могу посмотреть? Похоже, что запросы get для неработающих дают 502 HTML-ответа

Заранее спасибо,

Комментарии:

1. Может ли это быть один из двух шаблонов, который сломан? характер не найден. html или characterfound.html

2. возможно, вам следует использовать urllib.parse.unquote , чтобы не просто декодировать пробелы

3. Спасибо за ваше время, чувак — я просмотрел шаблоны и отключил некоторые аспекты для тестирования, они выглядят нормально… Я также попробовал urlib.parse.unquote, и это не помогло — я сильно застрял на этом

4. Есть ли у вас тестовая строка, которую, как вы знаете, можно найти в базе данных? Попробуйте свести к минимуму код и данные в базе данных, которые все еще выдают ошибку, и, возможно, вы найдете ответ. Трудно помочь, но я вижу, что «n» вызывает ошибку, но не «o» работает, но не найдено. Пустая строка выдает ошибку not found. И после ошибки сервер зависает примерно на 10 секунд, предполагая, что ошибка представляет собой какой-то бесконечный цикл, выполняемый в фоновом режиме

5. Я начинаю замечать некоторые тенденции со строками, которые вызывают проблемы: sioless, nie siedze, nie znies, если только я удаляю пробел перед вторым словом, он работает нормально. Бурк, который определенно находится в базе данных, и если я запускаю приложение на своем ПК с Windows, он работает без проблем

Ответ №1:

Это может быть какое-то странное правило перезаписи на сервере, потому что URL-адреса, не связанные с этим, сопоставляются и выдают ту же ошибку. Например http://tanalyst.pl/a/ n/a /

На самом деле любой путь, содержащий либо «[a-z]% [любые две цифры] s», либо «% [любые две цифры] n», либо «% [любые две цифры] [h, или j, или l, или q, или s, или t, или z] n, завершается ошибкой.

Возможно, другие @app.route("url-selector") функции в flask, которые мешают

/<character>/ может быть слишком общим и охватывать все. Возможно, вам следует изменить его на /results/<character>

Комментарии:

1. В качестве маршрутов у меня есть только следующие: @app.route(«/ contact») @app.route(«/») @app.route(«/ searchcharacter», методы = [«POST», «GET»]) @app.маршрут («/<символ>») Вы знаете, где я могу прочитать о правилах перезаписи сервера? Я вижу, что ссылка, которую вы опубликовали, не существует, но фактически нарушает работу моего приложения (сильно отстает)

2. @app.route("/<character>/") является очень общим и улавливает все URL-адреса

3. я изменил маршрут приложения ранее, тестируя все, что приходило мне в голову, на @app.route(«/results/<character>»), а также на @app.route(«/ searchresults/<character>»), но безуспешно, но я думаю, что мне придется удалить этот маршрут ввсе, поскольку теперь это будет бесполезно. Я немного беспокоюсь о том, что / a / n / a отстает от приложения, хотя и выясню, что я должен вам пиво, человек, действительно ценю ваше время

4. Настройки сервера и перезаписи зависят от того, какие программы вы используете для обслуживания своего приложения. Как вы его настроили?

5. я думаю, что это phusion passenger — это то, что упоминает служба хостинга. Все, что мне действительно нужно было сделать, это настроить один дополнительный скрипт python, который импортирует мое приложение