我是不熟悉烧瓶的人,对如何解决这个问题真的完全迷失了。我研究了其他SO问题,但是无论如何我似乎都无法解决这个问题。
我有这样的表格:
<form class="teamSelection" method="POST" action="/submitted">
<select class="teamForm" id="teamDropdownSelector" type="text" name="teamDropdown" placeholder="Select A Team">
<option disabled selected>Select a game</option>
<option id="WatfordVSManchester Utd" value="">Watford VS Manchester Utd</option>
</select>
<input class="btn" type="submit" value="submit">
</form>
和我的烧瓶一样:
from flask import Flask
app = Flask(__name__)
@app.route("/submitted")
def hello():
return "hello world"
目标是获取选定/提交的下拉菜单项的内容,并将其传递给flask文件,然后在其中使用团队名称来获取有关比赛的信息。但是此刻,我什至似乎无法使表格的POST正常工作,并且完全不知所措。我赞赏这是一个模糊且开放的问题,但我真的不知道该如何解决。
我应该使用jquery来检测下拉列表何时更改,并使用AJAX发送POST以某种方式调用脚本并将值传递给它吗?
任何帮助将不胜感激。
编辑
我以为我把它放在了原始帖子中,但是一定忘了。
我目前正在运行一个Apache localhost服务器,并且正在通过pycharm使用flask。我目前所做的只是将flask软件包安装在pycharm中,并且没有像在某些教程中看到的那样在命令行运行时进行任何设置。我以为没有必要执行此步骤,因为我已经启动了服务器并可以使用apache运行它?
当涉及到这样的后端东西时,我真的不知道,所以如果这是一个愚蠢的假设,我深表歉意。
我将烧瓶更改为:
from flask import Flask
app = Flask(__name__)
@app.route("/submitted", methods=['POST'])
def hello():
with open("newTest.csv", mode="w+") as file:
fileWriter = csv.writer(file)
fileWriter.writerow(['Time', 'HomeTeam', 'AwayTeam'])
file.close()
原因是,正如我所看到的,实际上是否正在调用此脚本,否则将创建一个名为newTest的新csv文件。在运行网页并没有提交新的csv文件后,因此该脚本未在运行,这可能是由于我未正确配置flask?/ apache够用的假设是错误的吗?
答案 0 :(得分:2)
您只需告诉flask方法接受POST请求并从请求中读取参数
示例:
from flask import Flask, request
app = Flask(__name__)
@app.route("/submitted", methods=['POST'])
def hello():
myvariable = request.form.get("teamDropdown")
... your code ...
return "hello world"
答案 1 :(得分:0)
将代码修改为:
from flask import Flask
app = Flask(__name__)
@app.route("/submitted", methods=['POST'])
def hello():
return request.form['teamDropdown']
请告诉我是否有帮助。
答案 2 :(得分:0)
因此,您的问题不是关于flask
,而是关于fopen
-您必须添加完整的文件路径,包括目录路径script_dir = path.dirname(path.abspath(__file__))
。
Flask脚本(已修改为在我的本地项目副本中启动):
from flask import Flask, render_template, request
import csv
from os import path
app = Flask(__name__)
script_dir = path.dirname(path.abspath(__file__))
@app.route ("/")
def index():
return render_template("index.html")
@app.route("/submitted", methods=["GET", "POST"])
def hello():
if request.method == "GET":
return render_template("index.html")
filefullpath = script_dir + '//newTest.csv'
with open(filefullpath, mode="w+") as file:
fileWriter = csv.writer(file)
fileWriter.writerow(['Time', 'HomeTeam', 'AwayTeam'])
file.close()
return "hello world"
index.html(在“ / templates”文件夹中)
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
Test
<br>
<form class="teamSelection" method="POST" action="/submitted">
<select class="teamForm" id="teamDropdownSelector" type="text" name="teamDropdown" placeholder="Select A Team">
<option disabled selected>Select a game</option>
<option id="WatfordVSManchester Utd" value="">Watford VS Manchester Utd</option>
</select>
<input class="btn" type="submit" value="submit">
</form>
</body>
</html>