我一直在尝试使用flask和wtforms以及firebase数据库构建一个web应用程序,但我一直收到错误消息“key error:“使用CSRF需要一个密钥。”“我不知道如何解决它。 这是我的代码:
from flask import Flask, render_template, request
from firebase import firebase
from flask_wtf import FlaskForm
from flask_wtf.csrf import CSRFProtect, CSRFError
from wtforms import DateField, StringField, TextAreaField
from wtforms.validators import DataRequired
from wtforms_components import TimeField
app = Flask(__name__)
csrf = CSRFProtect(app)
firebase = firebase.FirebaseApplication("https://uhungry-f9563.firebaseio.com", None)
class myForm(FlaskForm):
event = StringField("event", validators=[DataRequired()])
location = StringField("location", validators=[DataRequired()])
startDay = DateField("startDay", validators=[DataRequired()])
startTime = TimeField("startTime", validators=[DataRequired()])
endDay = DateField("endDay", validators=[DataRequired()])
endTime = TimeField("endTime", validators=[DataRequired()])
details = TextAreaField("details", validators=[DataRequired()])
count = 0
@app.route('/', methods=['GET' , 'POST'])
def home():
form = myForm()
if form.validate_on_submit():
global count
count += 1
putData = {'Event': form.event.data, 'Location': form.location.data, 'startDay': form.startDay.data, 'startTime': form.startTime.data,'endDay': form.endDay.data, 'endTime': form.endTime.data, 'Details': form.details.data}
firebase.put('/events', 'event' + str(count), putData)
return render_template("trial.html")
return render_template("home.html")
if __name__ == '__main__':
app.run(debug=True)
您收到此错误是因为您没有设置密钥。没有密钥,你就不能使用许多功能,如flash、flask登录,当然,正如你所经历的,CSRF保护。
解决此问题的最简单方法是在app config文件中设置密钥,但与其他答案不同,强烈建议将所有密钥(尤其是某些付费api或服务(如AWS)的密钥)保存在单独的
.env
文件中,该文件在分发代码时不共享。幸运的是,对于密钥,您不必担心环境变量,只需创建一个随机密钥,如下所示:您收到此错误是因为您没有设置密钥。没有密钥,你就不能使用许多功能,如flash、flask登录,当然,正如你所经历的,CSRF保护。
解决这个问题的最简单方法是在app config文件中设置一个密钥,但与其他答案不同的是,强烈建议将所有密钥(特别是某些付费api或服务(如AWS)的密钥)保存在单独的
.env
文件中,在分发代码时不共享该文件。幸运的是,对于密钥,您不必担心环境变量,只需创建一个随机密钥,如下所示:将此行添加到您的
app
代码中:您需要在应用程序配置中添加一个SECRET_密钥以利用csrf保护并提供一个WRF csrf SECRET_密钥,否则将使用您的密钥
相关问题 更多 >
编程相关推荐