配置会话后刷新时金字塔呈现空白页



我遇到了一个问题,在将 SignedCookieSessionFactory 添加到我的金字塔配置后,当我尝试在浏览器中刷新页面时,只返回一个空白页面(头部和身体标签都是空的)。我第一次点击该页面时,它会按预期呈现。单独的会话也会生成一个空白页。为了使页面再次呈现,我必须重新启动服务器。在我添加会话工厂之前刷新工作正常,但是刷新时会丢失状态(如预期的那样)。

金字塔配置:

def main(global_config, **settings):
    session_factory = SignedCookieSessionFactory('cossecret')
    config = Configurator(settings=settings, session_factory=session_factory)
    config.include('pyramid_jinja2')
    config.include('.models')
    config.include('.routes')
    config.registry.games = Games()
    config.scan()
    return config.make_wsgi_app()

routes.py:

def includeme(config):
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')
    config.add_route('game', '/game/{game}')

view.py:

@view_config(route_name='game', renderer='templates/game.jinja2')
def game_view(request):
    """ Returns Game Play page based on ID"""
    if "game_id" in request.session:
        if request.matchdict['game'] != request.session["game_id"]:
            if request.matchdict['game'] in request.registry.games.games:
                request.session.invalidate()
                request.session["game_id"] = request.matchdict['game']
            else:
                raise HTTPNotFound
    else:
        if request.matchdict['game'] in request.registry.games.games:
            request.session["game_id"] = request.matchdict['game']
        else:
            raise HTTPNotFound
    response = {}
    response['game'] = request.session['game_id']
    if "player_id" in request.session:
        response['player_id'] = request.session['player_id']
    else:
        response['player_id'] = "None"
    return response

我对金字塔很陌生,所以任何想法将不胜感激。逐步浏览渲染器,我注意到渲染器第一次扫描了模板中的 html 标头,但第二次完全跳过了它们,然后忽略了 body 标签之后的所有内容。不确定这是否有帮助。

所以显然在我的另一个观点中,这是我的API的一部分,有这个:

json_return = json.dumps(return_data)
response = Response     
response.content_type = 'json'      
response.body = json_return     
return Response(content_type='json', body=json_return)

我不知道为什么创建两个响应对象会导致这种行为,但是删除第一个响应对象以支持仅使用"返回"行解决了这个问题。

最新更新