#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, который импортирует мое приложение