烧瓶应用程序可以登录并在localhost上注册所有罚款。但是当我把它推到heroku时,这就成了一个问题。它显示了上面提到的错误。这是app.py代码
from flask import Flask, render_template, request, redirect, jsonify, url_for, flash
from sqlalchemy import create_engine, asc, desc
from sqlalchemy.orm import sessionmaker
from database_setup import Base, User, BlogPost
from flask import session as login_session
import random
import string
from wtforms import Form, BooleanField, TextField, PasswordField, validators
from passlib.hash import sha256_crypt
app = Flask(__name__)
#Connecting to database
engine = create_engine('sqlite:///travellerdata.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
结束于......
if __name__ == "__main__":
app.secret_key = 'some secret key'
app.debug = True
app.run()
答案 0 :(得分:7)
当您的HTTP服务器加载您的应用程序时,__name__
可能不等于'main'
。尝试将行app.secret_key = 'some secret key'
移到if块之外。
将秘密密钥放在源代码中并不是一个好主意,因为如果有人获得密钥,他们就可以恶意获取对您系统的访问权限。尝试将其存储在应用程序实例目录(snippet here)中的文件中,或将其放在环境变量(explanation here)中。
答案 1 :(得分:4)
当我使用flask-login生成会话ID时,我遇到了同样的问题,当我直接运行它时它工作正常,但是当我使用HTTP服务器时会输出错误。原始代码如下:
if __name__ == "__main__":
app.secret_key = os.urandom(24)
app.run()
然后我将app.secret_key = os.urandom(24)
移出__name__
并将其置于app = Flask(__name__)
之下,如下所示:
app = Flask(__name__)
app.secret_key = os.urandom(24)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
现在它运作良好。
答案 2 :(得分:1)
NullSessionInterface会话实现引发了异常,这是使用Flask-Session时的默认会话类型。那是因为你实际上并没有将SESSION_TYPE配置赋予Flask;将它设置为模块中的全局是不够的。
对于Flask 0.10,这个默认值没有多大意义; Flask 0.8或0.9可能有意义,但当前版本用作错误信号。在你的情况下,它现在给你错误的错误信息。
将SESSION_TYPE配置选项设置为其他选项。选择redis,memcached,filesystem或mongodb中的一个。
将其设置为文件系统是最简单的;有足够的默认配置可以在没有其他依赖项的情况下完成工作:
if __name__ == "__main__":
app.secret_key = 'super secret key'
app.config['SESSION_TYPE'] = 'filesystem'
sess.init_app(app)
app.debug = True
app.run()
答案 3 :(得分:0)
在尝试了很多解决方案后,我在随机网站上阅读了这篇文章,但是没有任何解决方案,对于我来说,解决方案对我来说非常简单 app.secret_key ='超级密钥' 在app = Flask(名称)之后,直接不在文件底部。