尝试在 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。希望这会有所帮助。