404 ошибка при запуске сценария python с кнопки html | Веб-сайт Google App Engine размещен - PullRequest
1 голос
/ 13 апреля 2020

У меня есть страница html, пользовательская. html и сценарий python, test.py (оба скриншота ниже). На странице html есть только кнопка, которая должна запускать скрипт python для печати строки (в моем следующем скрипте python я бы хотел, чтобы он делал больше, но это моя отправная точка).

В инструментах разработчика Chrome, когда я нажимаю кнопку, я получаю ошибку GET 404, инициированную Jquery. Будем очень благодарны за любые советы по успешной активации сценария python с моей кнопки html.

enter image description here enter image description here

Мой скрипт test.py просто

print("Successful line print")

Вот мой заказ. html документ

<code><!DOCTYPE html>
  <html lang="en" dir="ltr">

  <head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" type="text/css" href="../static/css/style2.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>


  </head>
  <pre>

  
Триггер Python функция goPython () {$. ajax ({url: "../folder/test.py", context: document.body}). Done (function () {alert ('закончен python сценарий') ) ;;}); }

РЕДАКТИРОВАТЬ: я добавляю код в мой скрипт main.py, необходимый для Google App Engine для обработки URL-вызовов и импортировать Flask.

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/")
def index():
    return render_template('index.html')

@app.route("/learn.html")
def learn():
    return render_template('learn.html')

@app.route("/custom.html")
def custom():
    return render_template('custom.html')

if __name__ == "__main__":
    app.run()

РЕДАКТИРОВАТЬ 2, после попытки ответа @Dustin Ingram:

Вот новый код моего пользовательского. html

<!DOCTYPE html>
  <html lang="en" dir="ltr">

  <head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" type="text/css" href="../static/css/style2.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>


  </head>

  <body>
    <div>
      <div>
        <button style="text-align: center; margin-bottom: 150px" class="search-btn" type="button" value=" Run Script " onclick="goPython()">Click Here
          <script>
            function goPython() {
              $.ajax({
                url: "/trigger-python",
                context: document.body
              }).done(function() {
                alert('finished python script');;
              });
            }
          </script>
        </button>
      </div>
    </div>
  </body>

  </html>

И я создал простой файл test.py, чтобы проверить возможность нажатия кнопки html для активации сценария python

from flask import Flask

app = Flask(__name__)

@app.route("/trigger-python")
def print_something():
    print("Successful line print")
    return 'OK'

print_something()

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

После исправления URL-адреса, вызываемого в AJAX, я я все еще получаю ту же ошибку 404 при нажатии кнопки. Ниже приведен обновленный скриншот Chrome Developer Tool.

enter image description here enter image description here

1 Ответ

2 голосов
/ 14 апреля 2020

Вы не можете вызвать Python скрипт через такой запрос AJAX. Вам нужно будет вызвать URL, который соответствует конечной точке веб-приложения Python.

Так, например, на внешнем интерфейсе:

$.ajax({
  url: "/do-something",
  context: document.body
})

, а затем на бэкэнде существует соответствующий маршрут:

@app.route("/do-something")
def do_something():
    print("Successful line print")
    return 'OK'

Подробнее о начале работы с Python веб-приложениями в App Engine см. https://cloud.google.com/appengine/docs/standard/python3/quickstart.

РЕДАКТИРОВАТЬ : Вот именно то, что я протестировал и подтвердил работы:

app.yaml:

runtime: python37

requirements.txt:

Flask==1.1.2

main.py :

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/custom.html')
def custom():
    return render_template('custom.html')

@app.route("/trigger-python")
def print_something():
    print("Successful line print")
    return 'OK'

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

templates/custom.html

<!DOCTYPE html>
  <html lang="en" dir="ltr">

  <head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" type="text/css" href="../static/css/style2.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>


  </head>

  <body>
    <div>
      <div>
        <button style="text-align: center; margin-bottom: 150px" class="search-btn" type="button" value=" Run Script " onclick="goPython()">Click Here
          <script>
            function goPython() {
              $.ajax({
                url: "/trigger-python",
                context: document.body
              }).done(function() {
                alert('finished python script');;
              });
            }
          </script>
        </button>
      </div>
    </div>
  </body>

  </html>

Вы можете увидеть его здесь: https://stackoverflow-61195723.uc.r.appspot.com/custom.html

...