Flask:在页面之间传递对象

时间:2018-06-17 16:20:25

标签: python flask pyvmomi

我想创建一个使用vCenter Server连接的简单Web应用程序,我希望在页面之间传递变量连接,而不是在每个页面上重新创建此连接。

这是代码:

#!/bin/env python
from flask import Flask, request, redirect, render_template, session
from flask import Flask, request, redirect, render_template, session
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired
from modulo import MyForm
from pyVim import connect
from pyVim.connect import SmartConnectNoSSL, Disconnect
from pyVmomi import vim


app = Flask(__name__)



@app.route('/')
def index():
 return redirect('/submit')

@app.route('/submit', methods=('GET', 'POST')) #ENTER USERNAME AND PASSWORD, SAVE ON /SUCCESS
def submit():
    form = MyForm()
    if form.validate_on_submit():
        return redirect('/success')
    return render_template('submit.html', form=form)

@app.route('/success', methods=('GET', 'POST'))    #ESTABILISH CONNECTION USING USERNAME AND PASSWORD CREDENTIALS
def success():
  form = MyForm()
 username = form.username.data
 password = form.password.data
 c = SmartConnectNoSSL(host='10.116.xxx.xxx', user=username, pwd=password)
 datacenter = c.content.rootFolder.childEntity[0]
 clusters = datacenter.hostFolder
 cluster = clusters.childEntity[0]
 esxi = cluster.host
 return render_template('success.html', esxi=esxi)

@app.route('/hosts', methods=('GET', 'POST'))
def hosts():
 macchine = request.form.getlist('host')
 for i in esxi: 
  for x in macchine:
   if i.name == x:
    do something..
     return FINISH


if __name__ == '__main__':
    app.secret_key='Secret'
    app.debug = True
    app.run(host = '0.0.0.0', port = 3000)

我想在其他页面中重用c变量(与服务器的连接),以及从此变量派生的对象,例如esxi(对象列表)。

如果我运行代码,烧瓶说:全局名称'esxi'未定义

我该怎么做?

1 个答案:

答案 0 :(得分:0)

在flask中,您可以将变量存储在您的应用程序对象上,以后再使用。示例:

1.dll
2.dll
..
6.dll