我对 Flask 还很陌生,我正在尝试构建一个考虑一些输入的 Web 应用程序,并尝试将这些输入传递给基于覆盖程序(MathCAD)中输入的包的另一个函数。基本上对于网络应用程序部分来说,它工作正常,我可以轻松检索所有变量,但是当我尝试将这些变量传递给该包(称为 MathcadPy)时,我遇到了丢失属性错误。这是将输入写入程序的代码部分(在本地工作正常),我称之为“Mathcad_exp.py”:
from MathcadPy import Mathcad
import os
folder = os.getcwd()
def mathcad_try(var):
mathcad_app = Mathcad(visible=False)
w_math = mathcad_app.open(folder+ "\Mathcad\Sample.mcdx")
w_math.set_real_input("d_cond", var)
w_math.save_as(folder + "\Mathcad\Sample.mcdx")
w_math.close()
return
这是我的烧瓶代码:
import os
from pathlib import Path
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_migrate import Migrate
from flask_session import Session
from flask import Flask, render_template, request, url_for, redirect,session
import numpy as np
import Mathcad_exp
app = Flask(__name__)
Session(app)
Bootstrap(app)
@app.route('/test/',methods=['POST','GET'])
def test():
if request.method =="GET":
return render_template("test.html")
else:
test_math=Mathcad_exp.mathcad_try(10)
return redirect(url_for("test"))
在 html 中我只放了一个按钮来传递“Post”方法:
<form action="#" method="post">
<!--Submit Button -->
<div class="py-1">
<div class="btn-example">
<button type="submit" class="btn btn-primary">Try to write a mathcad</button>
</div>
</div>
</div>
</form>
这两个python文件位于同一级文件夹中。 但无论如何我得到了一个属性错误:“AttributeError:'Mathcad'对象没有属性'_Mathcad__mcadapp'”。我可以注意到,属性的名称似乎与我在本地运行时发生了变化。我知道这是一个非常具体的问题,因为 Mathcad 是许可软件,但是我是否缺少在 Flask 中的 python 中使用另一个 API 脚本的一些重要部分?我再说一遍,我对此很陌生,也许我错过了一些基本的东西。
我通过在请求方法内添加到烧瓶路线来解决这个问题 对于 Coinizialitze 和 Counialize:
@app.route('/test/',methods=['POST','GET'])
def test():
if request.method =="GET":
return render_template("test.html")
else:
import pythoncom
pythoncom.CoInitialize()
test_math=Mathcad_exp.mathcad_try(10)
pythoncom.CoUninitialize()
return redirect(url_for("test"))