0

使用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,所以我想知道我在使用会话时无意中犯了哪些明显的错误。

非常感谢您的专业知识和帮助:)


编辑:

所以只是检查一下:如果用户禁用了 cookie,这不会为他查看的每个页面在数据库中创建一个新的会话条目吗?正确的?

4

2 回答 2

4

这是完全正确的。会话数据不存储在 cookie 中 - cookie 仅将用户数据的唯一 ID 存储在会话数据库中。

一个小问题:不要使用has_key- Python 多年来一直不鼓励使用它。使用in

if game_name in game_votes:
于 2011-02-10T21:57:37.850 回答
1

在单个视图中检查会话然后在同一个视图中设置变量是非常好的 - 大多数时候,如果我要在几个不同的视图中需要这些数据,我会创建一个私有函数(只需名称前的下划线)并调用它并将请求参数也传递给函数,因此它可以访问会话数据。然后在需要访问会话数据的每个视图中,我确保在开始时调用此函数,以便数据始终可用。

于 2011-02-10T21:59:45.707 回答