Flask — Получение входных данных с HTML-страницы и передача входных данных в функцию в другом файле Python

#python #html #flask

Вопрос:

Я пытаюсь получить пользовательский ввод из html-файла и передать его в функцию, которая находится в другом файле python в том же каталоге.

Пользователь должен ввести свое имя пользователя и пароль на веб-страницу html, и входные данные будут переданы в другой файл python для выполнения многочисленных функций проверки.

Мы были бы очень признательны за некоторую помощь или рекомендации 🙂

Спасибо

form.html файл

 <form action="{{ url_for("gfg")}}" method="post">
<label for="username">username:</label>
<input type="text" id="username" name="username" placeholder="username">
<label for="password">password:</label>
<input type="text" id="password" name="password" placeholder="password">
<button type="submit">Login</button>
 

app.py файл

 # importing Flask and other modules
from flask import Flask, request, render_template

# Flask constructor
app = Flask(__name__)



# A decorator used to tell the application
# which URL is associated function
@app.route('/', methods=["GET", "POST"])
def gfg():
   if request.method == "POST":
      # getting input with name = fname in HTML form
      username = request.form.get("username")
      # getting input with name = lname in HTML form
      password = request.form.get("password")

      return username   password
   return render_template("form.html")

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

основной файл python (где расположены функции)

 def main():
    
    username = app.gfg()[0]
    password = app.gfg()[1]
    TestLogin(username, password)

if __name__ == "__main__":
    main()
 

сообщение об ошибке

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

1. Пожалуйста, вставьте сюда полную ошибку отслеживания. и не публикуйте изображения.

Ответ №1:

Вам нужно использовать контекст запроса.

Ошибка времени выполнения: Работа вне контекста запроса.

Обычно это означает, что вы пытались использовать функции, для которых требовался активный HTTP-запрос. Обратитесь к документации по тестированию для получения информации о том, как избежать этой проблемы.

 [...]
with app.test_request_context(
        '/url/', data={'format': 'short'}):
    username = app.gfg()[0]
    password = app.gfg()[1]
    TestLogin(username, password)
    [...] 
 

Вы можете ознакомиться с документами

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

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

2. Я не думаю, что есть необходимость делать имя пользователя и пароль глобальными. но если вы хотите получить к ним глобальный доступ, вы можете использовать сеансы. в функции gfg вы можете использовать session["user"] = username и session["pass"] = password . Теперь вы можете получить доступ к переменным с помощью session["user"] и session["pass"]

3. из колбы приложение импорт, запрос, render_template, колбы, сессии от проверки.проверка импорт TestPrerequisite приложение = колба( имя ) приложение.файл config[‘SECRET_KEY’] = ‘kjshkjdhjs hjshjhdjah’ @приложение.маршрут(‘/’, методы=[‘get’ в, ‘сообщение’]) логин четкости(): если request.способ == ‘пост’: сессия[«MSISDN абонента»] = просьбе.форма.вам(‘номер MSISDN’) сессии[«пароль»] = просьбе.форма.вам(‘пароль’) возвращение render_template(«form.html») testLogin(сеанс[«MSISDN»], сеанс[«пароль»])

4. сессия не работает внутри app.app_context() , как я вижу. вы можете использовать их снаружи с блоком. определите их оба как переменные, username = session["user"] password = session["pass"] . затем в блоке с использованием TestLogin(username, password) .