尝试在 Heroku 上部署 Flask 应用程序,部署工作正常,直到我在我的代码中添加会话,然后出现 500 内部错误。如何解决这个问题?
Trying to deploy flask app on Heroku, deployment works fine until I add sessions in my code, then it's giving 500 internal error. how to resolve this?
一段代码
def wishListCount():
wishlist_count = len(session['Wishlist'])
if len(session['Wishlist']) <= 0:
return 0
else:
return wishlist_count
@app.route('/wishlist', methods=['GET', 'POST', 'DELETE'])
def wishlist():
if request.method == 'POST':
product_id = int(request.form['product_id'])
ListItems = [product_id]
if 'Wishlist' in session:
if product_id in session['Wishlist']:
print("This product is already in wishList!")
else:
session['Wishlist'] = mergeDict(session['Wishlist'], ListItems)
else:
session['Wishlist'] = ListItems
wishlist_count = wishListCount()
Heroku 日志
状态从 starting 变为 up
2020-05-07T00:37:33.000000+00:00 应用[api]:构建成功
2020-05-07T00:37:39.445026+00:00 heroku[路由器]: at=info method=GET path="/" host=intelli-supermart.herokuapp.com request_id=bc70627f-fbff-4722-8b7e-f97c18e7e2d5 fwd="203.128.16.105" dyno=web.1 connect=1ms service=102ms status=500 bytes=470 protocol=https
2020-05-07T00:37:39.441994+00:00 app[web.1]: [2020-05-07 00:37:39,440] 应用程序错误:/ [ 异常获取]
2020-05-07T00:37:39.442004+00:00 应用程序[web.1]:回溯(最近调用最后):
2020-05-07T00:37:39.442005+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site packages/flask/app.py ",第 2447 行,在 wsgi_app
2020-05-07T00:37:39.442005+00:00 应用[web.1]:响应=self.full_dispatch_request()
2020-05-07T00:37:39.442006+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-
packages/flask/app.py”,第 1952 行,在 full_dispatch_request
中
2020-05-07T00:37:39.442006+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-05-07T00:37:39.442007+00:00 app[web.1]:文件“/app/.heroku/python/lib/python3.6/site-packages/flask/app。 py”,第 1821 行,在 handle_user_exception
2020-05-07T00:37:39.442007+00:00 app[web.1]:重新加注(exc_type,exc_value,tb)
2020-05-07T00:37:39.442007+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py” ,第 39 行,在重新加注中
2020-05-07T00:37:39.442008+00:00 app[web.1]:提高价值
2020-05-07T00:37:39.442009+00:00 app[web.1]:文件“/app/.heroku/python/lib/python3.6/site-packages/flask/app。 py”,第 1950 行,在 full_dispatch_request
2020-05-07T00:37:39.442009+00:00 app[web.1]: rv = self.dispatch_request()
2020-05-07T00:37:39.442009+00:00 app[web.1]:文件“/app/.heroku/python/lib/python3.6/site-packages/flask/app。 py”,第 1936 行,在 dispatch_request
2020-05-07T00:37:39.442010+00:00 应用[web.1]: return self.view_functionsrule.endpoint
2020-05-07T00:37:39.442010+00:00 app[web.1]:文件“/app/app.py”,第 117 行,在索引
中
2020-05-07T00:37:39.442011+00:00 app[web.1]: wishlist_count = wishListCount()
2020-05-07T00:37:39.442011+00:00 app[web.1]:文件“/app/app.py”,第 79 行,在 wishListCount
中
2020-05-07T00:37:39.442011+00:00 app[web.1]: wishlist_count = len(session['Wishlist'])
2020-05-07T00:37:39.442012+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-packages/werkzeug/local.py” ,第 377 行,在
2020-05-07T00:37:39.442012+00:00 app[web.1]: getitem = lambda x, i: x._get_current_object ()[i]
2020-05-07T00:37:39.442012+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-packages/flask/sessions.py” , 第 84 行,在 getitem
2020-05-07T00:37:39.442013+00:00 app[web.1]: return super(SecureCookieSession, self).getitem(键)
2020-05-07T00:37:39.442019+00:00 app[web.1]: KeyError: 'Wishlist'
2020-05-07T00:37:39.445086+00:00 app[web.1]: 10.11.150.203 - - [07/May/2020:00:37:39 +0000] "GET / HTTP/1.1" 500 290 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
似乎键 WishList
不在 session
变量中。你总是用这个
来检查会话中的密钥是否存在
if 'WishList' in session:
你还应该在代码的开头给session['WishList']
赋值
您的会话中似乎没有 Wishlist
。您可以尝试使用 session.get('Wishlist')
获取变量,如果会话中没有 Wishlist,则将 return None
。希望这会有所帮助。
一段代码
def wishListCount():
wishlist_count = len(session['Wishlist'])
if len(session['Wishlist']) <= 0:
return 0
else:
return wishlist_count
@app.route('/wishlist', methods=['GET', 'POST', 'DELETE'])
def wishlist():
if request.method == 'POST':
product_id = int(request.form['product_id'])
ListItems = [product_id]
if 'Wishlist' in session:
if product_id in session['Wishlist']:
print("This product is already in wishList!")
else:
session['Wishlist'] = mergeDict(session['Wishlist'], ListItems)
else:
session['Wishlist'] = ListItems
wishlist_count = wishListCount()
Heroku 日志
状态从 starting 变为 up
2020-05-07T00:37:33.000000+00:00 应用[api]:构建成功
2020-05-07T00:37:39.445026+00:00 heroku[路由器]: at=info method=GET path="/" host=intelli-supermart.herokuapp.com request_id=bc70627f-fbff-4722-8b7e-f97c18e7e2d5 fwd="203.128.16.105" dyno=web.1 connect=1ms service=102ms status=500 bytes=470 protocol=https
2020-05-07T00:37:39.441994+00:00 app[web.1]: [2020-05-07 00:37:39,440] 应用程序错误:/ [ 异常获取]
2020-05-07T00:37:39.442004+00:00 应用程序[web.1]:回溯(最近调用最后):
2020-05-07T00:37:39.442005+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site packages/flask/app.py ",第 2447 行,在 wsgi_app
2020-05-07T00:37:39.442005+00:00 应用[web.1]:响应=self.full_dispatch_request()
2020-05-07T00:37:39.442006+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site- packages/flask/app.py”,第 1952 行,在 full_dispatch_request
中2020-05-07T00:37:39.442006+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-05-07T00:37:39.442007+00:00 app[web.1]:文件“/app/.heroku/python/lib/python3.6/site-packages/flask/app。 py”,第 1821 行,在 handle_user_exception
2020-05-07T00:37:39.442007+00:00 app[web.1]:重新加注(exc_type,exc_value,tb)
2020-05-07T00:37:39.442007+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py” ,第 39 行,在重新加注中
2020-05-07T00:37:39.442008+00:00 app[web.1]:提高价值
2020-05-07T00:37:39.442009+00:00 app[web.1]:文件“/app/.heroku/python/lib/python3.6/site-packages/flask/app。 py”,第 1950 行,在 full_dispatch_request
2020-05-07T00:37:39.442009+00:00 app[web.1]: rv = self.dispatch_request()
2020-05-07T00:37:39.442009+00:00 app[web.1]:文件“/app/.heroku/python/lib/python3.6/site-packages/flask/app。 py”,第 1936 行,在 dispatch_request
2020-05-07T00:37:39.442010+00:00 应用[web.1]: return self.view_functionsrule.endpoint
2020-05-07T00:37:39.442010+00:00 app[web.1]:文件“/app/app.py”,第 117 行,在索引
中2020-05-07T00:37:39.442011+00:00 app[web.1]: wishlist_count = wishListCount()
2020-05-07T00:37:39.442011+00:00 app[web.1]:文件“/app/app.py”,第 79 行,在 wishListCount
中2020-05-07T00:37:39.442011+00:00 app[web.1]: wishlist_count = len(session['Wishlist'])
2020-05-07T00:37:39.442012+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-packages/werkzeug/local.py” ,第 377 行,在
2020-05-07T00:37:39.442012+00:00 app[web.1]: getitem = lambda x, i: x._get_current_object ()[i]
2020-05-07T00:37:39.442012+00:00 app[web.1]: 文件“/app/.heroku/python/lib/python3.6/site-packages/flask/sessions.py” , 第 84 行,在 getitem
2020-05-07T00:37:39.442013+00:00 app[web.1]: return super(SecureCookieSession, self).getitem(键)
2020-05-07T00:37:39.442019+00:00 app[web.1]: KeyError: 'Wishlist'
2020-05-07T00:37:39.445086+00:00 app[web.1]: 10.11.150.203 - - [07/May/2020:00:37:39 +0000] "GET / HTTP/1.1" 500 290 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
似乎键 WishList
不在 session
变量中。你总是用这个
if 'WishList' in session:
你还应该在代码的开头给session['WishList']
赋值
您的会话中似乎没有 Wishlist
。您可以尝试使用 session.get('Wishlist')
获取变量,如果会话中没有 Wishlist,则将 return None
。希望这会有所帮助。