金字塔渲染空白页在配置会话后刷新

时间:2017-11-09 00:04:52

标签: python-2.7 jinja2 session-cookies pyramid

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

金字塔配置:

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标记后的所有内容。不确定这是否有帮助。

1 个答案:

答案 0 :(得分:0)

显然,在我的另一个观点中,我的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)

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