我对此感到困惑,因为如果我在函数之外运行我的代码并使用print而不是return我似乎没有任何问题。
我通过以下表单将数据从 HTML 发送到 Flask:
<form method="POST" action="/">
<h4>Search for Your Device</h4>
<p>Enter the Asset Tag of the device - On the back sticker or in small print at the bottom of the lock screen.</p>
<p><input type = "text" name = "Name" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
Run Code Online (Sandbox Code Playgroud)
然后,我获取该输入并使用以下函数向我的移动设备管理服务器发出 API 请求
@app.route('/', methods=["GET","POST"])
def homepage():
try:
if request.method == "POST":
#API URL
JSS_API = 'https://private_url.com'
#Pre-Defined username and password
username = 'username'
password = 'password'
#Ask User for the Asset tag
asset_tag = request.form
New_JSS_API = JSS_API + asset_tag
#Disables Warnings about SSL
requests.packages.urllib3.disable_warnings()
JSS_Asset_Response = requests.get(New_JSS_API, auth=(username, password), verify=False, headers={'Accept': 'application/json'})
JSS_json = JSS_Asset_Response.json()
email_dict = {}
for item in JSS_json['mobile_devices']:
email_dict["Stu_name".format(item)]=item['realname']
#Can call the dictionary value by doing the following:
stu_name = email_dict['Stu_name']
return stu_name
return render_template("index.html")
except Exception as e:
return(str(e))
Run Code Online (Sandbox Code Playgroud)
我收到的错误是“必须是 str,而不是 ImmutableMultiDict”,但是如果在我的终端中运行该函数,将 替换为 ,return stu_name我print(stu_name)会得到我正在寻找的结果!
我的目标是通过表格输入,然后将学生的全名返回到网页!
我想request.formis a ImmutableMultiDict,JSS_API是一个字符串,所以你不能将 a 附加ImmutableMultiDict到字符串中,这就是你收到错误的原因。
您可以将其转换ImmutableMultiDict为字典:
request.form.to_dict()
Run Code Online (Sandbox Code Playgroud)
然后调试你的代码,获取表单数据,我以前用它request.form.to_dict().values()[0]来获取json字符串。
或者
如果您使用的是POST方法,您可以检索如下参数:
username = request.form.getlist('username[]')
Run Code Online (Sandbox Code Playgroud)
GET方法,使用这个:
username = request.args.getlist('username[]')
Run Code Online (Sandbox Code Playgroud)
请参阅doc的更多详细信息。
| 归档时间: |
|
| 查看次数: |
3554 次 |
| 最近记录: |