Вопрос:

Пирамида рендеринга пустой страницы при обновлении после настройки сеансов

python-2.7 jinja2 session-cookies pyramid

83 просмотра

1 ответ

23 Репутация автора

У меня возникла проблема, когда после добавления 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. Не уверен, что это поможет.

Автор: Nick Источник Размещён: 09.11.2017 12:04

Ответы (1)


0 плюса

23 Репутация автора

Очевидно, что в другом из моих представлений, который является частью моего 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» решило проблему.

Автор: Nick Размещён: 09.11.2017 09:42
Вопросы из категории :
32x32