python – 没有坚持heroku的Flask会话
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 没有坚持heroku的Flask会话,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1623字,纯文字阅读大概需要3分钟。
内容图文
![python – 没有坚持heroku的Flask会话](/upload/InfoBanner/zyjiaocheng/722/2663a632a3ec478198009a5883460e29.jpg)
当用户登录我的示例应用程序时,我将一个用户名密钥添加到会话对象中,并将用户对象挂起全局“g”对象.见下文.
@app.route('/login/', methods=['GET', 'POST'])
def login():
"""Logs the user in."""
error = None
if request.method == 'POST':
print("login hit")
user = get_user(request.form['username'])
if user is None:
error = 'Invalid username'
print error
elif not check_password_hash(user.password, request.form['password']):
error = 'Invalid password'
print error
else:
flash('You were logged in')
print "logged in"
session['username'] = request.form['username']
g.user = request.form['username']
print error, "error"
return redirect(url_for('main'))
现在,如果用户成功登录(正在发生的事情),他将重定向到主页面.这将拆除旧请求并生成一个新请求.问题是当新请求开始时,会话被擦除.我打印出会话密钥,它们都是空的.这只发生在heroku上,而不是在我的本地机器上.我究竟做错了什么.
@app.before_request
def before_request():
print session.keys(), session.values() # shows [] []
print("before request")
print ('username' in session, "in session?")
g.db = connect_db()
g.user = None
if "username" in session:
g.user = get_user(session['username'])
解决方法:
嗯,看到这确实是由于多个工人的答案,我将从评论部分移动它. :)你不希望redis在gunicorn层,而不是你的应用程序.这四个链接可以帮助你:
1)First, enable/install Redis in Heroku
2)Then check this out(将基于redis替换Flasks整个会话驱动程序):
这可能是矫枉过正,我只是使用redis作为应用程序中的密钥存储值(查看我的第三个链接),但您可能会喜欢这种方法.
3)Not as related but shows some usage examples (queue system for flask with redis)
4)Basic redis tutorial for python
这三个链接应该让你开始,如果它还不够我会挖掘更多的例子,所以只要问你是否需要它们!
内容总结
以上是互联网集市为您收集整理的python – 没有坚持heroku的Flask会话全部内容,希望文章能够帮你解决python – 没有坚持heroku的Flask会话所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。