Как передать пользовательский ввод из формы в другую функцию в Flask? - PullRequest
0 голосов
/ 08 июля 2020

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

Вот мой скрипт app.py:

#Import key modules/packages
from flask import (Flask, g, redirect, render_template, request, session, url_for,send_from_directory)
from ise import ERS
#from ise_api import ise, get_endpoint    

class User:
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

    def __repr__(self):
        return f'<User: {self.username}>'

users = [User(id=1, username='Anthony', password='password'),
         User(id=2, username='Becca', password='secret'),
         User(id=3, username='M', password='testing123')]  #Create credentials for users. If you want to do another user, just add another id,username,pwd inside the brackets

app = Flask(__name__)

app.secret_key = 'somesecretkeythatonlyishouldknow'

@app.route('/')
def home():
    return redirect(url_for('login'))

@app.before_request
def before_request():
    g.user = None

    if 'user_id' in session:
        user = [x for x in users if x.id == session['user_id']][0]
        g.user = user
        
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session.pop('user_id', None)

        username = request.form['username']
        password = request.form['password']
        
        user = [x for x in users if x.username == username][0]
        if user and user.password == password:
            session['user_id'] = user.id
            return redirect(url_for('profile'))

        return redirect(url_for('login'))

    return render_template('login.html')

@app.route('/profile')
def profile():
    if not g.user:
        return redirect(url_for('login'))

    return render_template('profile.html')

@app.route('/endpoint', methods = ["POST","GET"])
def search_endpoint():
    user_mac_input = request.form
    return render_template('ise_form.html', user_mac_input = user_mac_input)

def print_the_output(user_input):
    print(user_input)

user_input = search_endpoint()
print_the_output()

Вот my ise_form. html file:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1> ISE Submission </h1>
<form action = "{{ url_for('search_endpoint')}}" method="POST">
  Submit MAC<input type="text" name="user_mac_input" size="100" placeholder="Enter MAC Address Here!" >
    <input type = "submit" value = "Submit">
</form>
<p>If you click the "Submit" button, the form-data will be sent to a page called "/endpoint".</p>

</body>
</html>

Это ошибка, которую я получаю при запуске приложения flask:

RuntimeError: Working outside of request context.

This typically means that you attempted to use functionality that needed
an active HTTP request. Consult the documentation on testing for
information about how to avoid this problem.

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

Я новичок в flask / html с использованием python, поэтому любые идеи или предложения будут оценены.

...