我遇到的问题是,在我的金字塔配置中添加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标记后的所有内容。不确定这是否有帮助。
答案 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"线解决了这个问题。