我正在Flask中编写一个Web应用程序来连接虚拟机并远程运行一些shell命令。系统的流程如下:
获取VM详细信息,用户名和Pswd - >建立SSH连接 - >使用少量用户输入以特定顺序运行预定义命令。
为此,我创建了一个建立SSH连接的类,并具有运行命令的功能。
在Flask视图功能中,只要用户登录,就会创建此类的新实例。这用作应用程序的身份验证方案,此实例需要可供其他视图访问,以便为登录用户运行命令。此外,这需要与会话相关,即新实例需要为另一个独立请求创建类。
问题是如何使类实例变量可供其他视图访问。如果我将此变量设为全局变量,那么它将为整个应用程序进行唯一设置,并且与会话和请求无关。
我不想在数据库中存储任何内容(用户信息等),因为一切都是动态完成的。
以下是view.py文件的片段:
ssh_conn是其他视图需要可访问的变量。此实例用于其他视图,如createview,以列出登录用户的视图。
我感谢所有帮助,如果有其他方法可以达到目的,请同时提及。
from flask import *
from app import app
from form import *
from ssh_connection import ssh
ssh_conn = None;
#
# index page
#
@app.route("/", methods=['GET', 'POST'])
@app.route('/index/', methods=['GET', 'POST'])
def login():
form=LoginForm()
ssh_conn = ssh()
if form.validate_on_submit():
if validate_login(request.form['vm_name'], request.form['username'], request.form['password']):
return redirect('/flow/createview/')
flash('All fields are mandatory')
return render_template("login.html", form=form);
@app.route("/flow/createview/", methods=["GET", "POST"])
def createview():
form = createViewForm()
global ssh_conn;
if form.validate_on_submit():
#TODO: add create view code
views = ssh_conn.listviews();
return render_template("createview.html", form=form, lsviews = views);
# validates login by creating an SSH connection
def validate_login(server, username, password):
global ssh_conn;
ssh_conn.__set__(server, username, password);
ssh_conn_status = ssh_conn.establish_connection();
if ssh_conn_status == 'success':
return True;
flash(ssh_conn_status);
return False;
答案 0 :(得分:0)
使用Flask的g变量存储类,它将完全按照您的意愿执行。在我们对其进行身份验证后,我们使用它来存储用户对象: