如何解决解析/传递值后如何清除表单中的变量Flask WTForms TimeField和解析
不在编程领域,只是一种爱好:-)通常不问问题,但确实陷入了这个问题。对于比我更有知识的人来说,这可能是一个简单的解决方法:-)
具有一个主文件server.py和一个用于解析python文件的表单。
Server.py
from flask import Flask,render_template,jsonify,request,redirect,flash,session,url_for
from flask_wtf.csrf import CSRFProtect,CSRFError
from helper.getbmedata import getBMEData1
from helper.lights import LightsTimeForm,lights_parse
app = Flask(__name__)
CSRFProtect(app)
app.config.update(
DEBUG=True,WTF_CSRF_ENABLED=False,SECRET_KEY='you-will-never-guess',)
@app.route("/myBME",methods=['POST','GET'])
def getTemps():
global temp1,hum1,psi1
if request.method == "GET":
bmedata = getBMEData1()
temp1 = bmedata[0]
hum1 = bmedata[1]
psi1 = bmedata[2]
return jsonify(temp=temp1,hum=hum1,psi=psi1)
@app.route("/index",methods=['GET','POST'])
@app.route("/")
def index():
return render_template('index.html',title="Main page")
@app.route("/lights",'POST'])
def addtime():
form = LightsTimeForm()
if form.validate_on_submit():
lights_parse()
flash("Account created!","success")
return redirect(url_for("index"))
return render_template('lights.html',title='Changing Light Schedule',form=form)
@app.errorhandler(CSRFError)
def handle_csrf_error(e):
return render_template('csrf_error.html',reason=e.description),400
if __name__ == "__main__":
app.run(host='0.0.0.0',port=5000,debug=False)
解析单独的文件:
from wtforms.fields.html5 import TimeField
from wtforms import SubmitField
from flask_wtf import FlaskForm
import configparser
from datetime import datetime
def start_time():
global t1_start_now,t1_stop_now
config = configparser.ConfigParser()
config.read('applicat/configs/time_config.ini')
t1_start_now = config['LIGHTTIME_01']['START01']
t1_stop_now = config['LIGHTTIME_01']['STOP01']
t1_start_now = datetime.strptime(t1_start_now,'%H:%M:%S')
t1_stop_now = datetime.strptime(t1_stop_now,'%H:%M:%S')
class LightsTimeForm(FlaskForm):
# Let's create form objects
start_time()
t1_start = TimeField('Start time:',format='%H:%M',default=t1_start_now)
t1_stop = TimeField('Stop time:',default=t1_stop_now)
submit = SubmitField("Submit")
# This code would save the time selected in form to the INI file
def lights_parse():
form = LightsTimeForm()
t1_start = form.t1_start.data
t1_stop = form.t1_stop.data
tconfig = configparser.ConfigParser()
time_data = {'LIGHTTIME_01': dict(START01=t1_start,STOP01=t1_stop)}
tconfig.read_dict(time_data)
tstart1 = tconfig['LIGHTTIME_01']['START01']
tstop1 = tconfig['LIGHTTIME_01']['STOP01']
# This just prints the time to the terminal for us to see that everything was recorded correctly (not necessary)
print("START:",{tstart1})
print('STOP:',{tstop1})
with open('applicat/configs/time_config.ini','w') as configfile:
tconfig.write(configfile)
我希望每次激活/ lights路由或更新字段中的值时,使用INI文件中的值更新表单的时间字段。我试图将session.clear()放在主server.py中,但这似乎不是修复它的正确方法:-)
它会执行此操作,但仅在重新启动服务器时才执行,而不是在按下“提交”按钮或遵循/ lights路由时才执行。
提前感谢大家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。