Сессии Django: можете ли вы проверить данные сеанса и установить их в том же виде? - PullRequest
0 голосов
/ 11 февраля 2011

При использовании сессий Django , является ли хорошей практикой практическая проверка того, были ли ранее установлены данные сеанса, и если не устанавливать исходные данные сеанса, в том же виде?

Приведет ли это к серьезным проблемам для меня или пользователей, если у пользователей отключены файлы cookie?

(Наличие тестовых файлов cookie немного смутило меня. Однако, если вы воспользуетесь ими, вы не сможете записать данные о странице, которую пользователь первоначально просматривал.)


Ниже приведена выдержка из моего файла views.py. В представлении пользователь посещает страницу с игрой на ней.

Если они ранее сохранили данные сеанса - и если смотрят игру в первый раз - представление изменит данные сеанса, чтобы записать факт, что они посетили игру. Если у них нет данных сеанса, они будут здесь инициализированы для них.

def game(request, game_name):
    game = get_object_or_404(Game, web_name=game_name)
    c = { 'game': game }

    # game_votes is used to store if user has voted on game yet.
    # Also a key in dictionary indicates user has previously visited that game.
    game_votes = request.session.get('game_votes', False):
    if game_votes:
        if not game_votes.has_key(game_name):
            game_votes[game_name] = False
            request.session['game_votes'] = game_votes
            request.session.modified = True
        else:
            pass
    else: # I.e. no session was declared previously.
        request.session['game_votes'] = { game_name: False }
        request.session['sorting_choice'] = 'PO'
        request.session['ip_address'] = request.META['HTTP_X_FORWARDED_FOR']

    return render_to_response('game.html', c)


Поскольку я впервые использую Django, я хотел знать, какие грубые ошибки я случайно совершил в отношении использования сессий.

Большое спасибо за ваш опыт и помощь:)


EDIT:

Так что просто для проверки: если у пользователя отключены файлы cookie, это не создает новую запись сеанса в базе данных для каждой страницы, которую он просматривает? Верно?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2011

Это совершенно верно.Данные сеанса не сохраняются в файлах cookie - файл cookie просто хранит уникальный идентификатор данных пользователя в базе данных сеанса.

Один минус: не используйте has_key - его не рекомендуется использовать в Python длягода.Используйте in:

if game_name in game_votes:
1 голос
/ 11 февраля 2011

Совершенно нормально проверять сеансы в одном представлении, а затем устанавливать переменные в одном представлении - большую часть времени, если мне понадобятся эти данные в нескольких разных представлениях, я бы сделал частную функцию(просто с подчеркиванием перед именем) и вызовите его, а также передайте параметр запроса функции, чтобы он имел доступ к данным сеанса.Затем в каждом представлении, которому необходим доступ к данным сеанса, я обязательно вызываю эту функцию при запуске, чтобы данные всегда были доступны.

...