Flask 未激活功能
Flask not activating function
我一直在使用 python flask 以及 html,为了创建一个小网站,(只是作为我放学后的爱好),我创建了一个表单在 html 中,并将其保存在项目的模板文件夹中。然后我还在 python 脚本中添加了一个函数,所以当点击网页的按钮时,它会将用户重定向回主页 (index.html),但是当我测试了网页和单击网页上的按钮(使用烧瓶服务器 运行)显示“400 错误请求”页面
Python代码:
#Python code behind the website
import datetime
from flask import Flask, session, redirect, url_for, escape, request, render_template
print ("started")
def Log(prefix, LogMessage):
timeOfLog = datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S" + " : ")
logFile = open("Log.log", 'a')
logFile.write("[" + timeOfLog + "][" + prefix + "][" + LogMessage + "] \n")
logFile.close()
app = Flask(__name__)
@app.route('/')
def my_form():
print ("Acessed index")
return render_template("index.html")
@app.route('/', methods=['POST'])
def my_form_post():
text = request.form['text']#requests text from the text form
processed_text = text #does nothing
user = "" #use poss in future to determin user
logFile = open("MessageLog.msglog", 'a')#opens the message log file in append mode
logFile.write(text + "\n")#stores the inputted message in the message log file
logFile.close()
#print (text)
Log("User Message", (user + text))#uses the main log file to store messages aswell as errors
print ("Accessing index")
return render_template("test.html")
@app.route('/test', methods=['POST'])
def test():
#text = request.form['text']
print ("Test page function")
#return "hello"
return render_template("index.html")
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0')
HTML代码:
-->
<body>
<h1>Test Page</h1>
<form method="POST">
<input type="submit" name="my-form" value="Send">
</form>
</body>
堆栈轨迹:
您需要 post 您的表格正确 URL:
<body>
<h1>Test Page</h1>
<form method="POST" action='/test'>
<input type="submit" name="my-form" value="Send">
</form>
</body>
默认情况下,如果您不向 HTML 表单添加 action
属性,它只会对您当前所在的 URL 执行它定义的方法。您可以添加 action
属性来更改该行为。
您也可以使用 url_for()
函数执行此操作。这更安全一些,因为 URL 比您的视图方法名称更改得更频繁:
<body>
<h1>Test Page</h1>
<form method="POST" action="{{ url_for('test') }}">
<input type="submit" name="my-form" value="Send">
</form>
</body>
您将视图方法的名称(不是 URL)作为字符串传递给函数。小心使用正确的引号。
请注意,对同一个 URL 有 2 个视图会有点混乱。通常像这样的事情是通过 YMMV 完成的,但请考虑将其用于您的应用程序:
@app.route('/someurl')
def some_view():
if request.method == "POST":
# handle POST
else:
# handle GET
我一直在使用 python flask 以及 html,为了创建一个小网站,(只是作为我放学后的爱好),我创建了一个表单在 html 中,并将其保存在项目的模板文件夹中。然后我还在 python 脚本中添加了一个函数,所以当点击网页的按钮时,它会将用户重定向回主页 (index.html),但是当我测试了网页和单击网页上的按钮(使用烧瓶服务器 运行)显示“400 错误请求”页面
Python代码:
#Python code behind the website
import datetime
from flask import Flask, session, redirect, url_for, escape, request, render_template
print ("started")
def Log(prefix, LogMessage):
timeOfLog = datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S" + " : ")
logFile = open("Log.log", 'a')
logFile.write("[" + timeOfLog + "][" + prefix + "][" + LogMessage + "] \n")
logFile.close()
app = Flask(__name__)
@app.route('/')
def my_form():
print ("Acessed index")
return render_template("index.html")
@app.route('/', methods=['POST'])
def my_form_post():
text = request.form['text']#requests text from the text form
processed_text = text #does nothing
user = "" #use poss in future to determin user
logFile = open("MessageLog.msglog", 'a')#opens the message log file in append mode
logFile.write(text + "\n")#stores the inputted message in the message log file
logFile.close()
#print (text)
Log("User Message", (user + text))#uses the main log file to store messages aswell as errors
print ("Accessing index")
return render_template("test.html")
@app.route('/test', methods=['POST'])
def test():
#text = request.form['text']
print ("Test page function")
#return "hello"
return render_template("index.html")
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0')
HTML代码: -->
<body>
<h1>Test Page</h1>
<form method="POST">
<input type="submit" name="my-form" value="Send">
</form>
</body>
堆栈轨迹:
您需要 post 您的表格正确 URL:
<body>
<h1>Test Page</h1>
<form method="POST" action='/test'>
<input type="submit" name="my-form" value="Send">
</form>
</body>
默认情况下,如果您不向 HTML 表单添加 action
属性,它只会对您当前所在的 URL 执行它定义的方法。您可以添加 action
属性来更改该行为。
您也可以使用 url_for()
函数执行此操作。这更安全一些,因为 URL 比您的视图方法名称更改得更频繁:
<body>
<h1>Test Page</h1>
<form method="POST" action="{{ url_for('test') }}">
<input type="submit" name="my-form" value="Send">
</form>
</body>
您将视图方法的名称(不是 URL)作为字符串传递给函数。小心使用正确的引号。
请注意,对同一个 URL 有 2 个视图会有点混乱。通常像这样的事情是通过 YMMV 完成的,但请考虑将其用于您的应用程序:
@app.route('/someurl')
def some_view():
if request.method == "POST":
# handle POST
else:
# handle GET