Django 如何在下一个请求中获取会话数据?
How can Django get session data in next request?
def home(request):
# logged in
if request.user.is_authenticated:
request.session['username'] = str(request.user)
request.session.set_expiry(0)
# anonymous
else:
# how could Django get session data here ?
cur = request.session.get('username', None)
if cur:
pass
else:
anon = random.choice(settings.SESSION_NAMES)
request.session['username'] = anon
request.session.set_expiry(42)
res = render(request, 'ex/home.html', {'username': request.session['username']})
return res
我正在尝试了解会话。在上面的匿名案例中,我将会话数据 'username' 设置为已获取的请求。在下一个请求中(刷新后),我可以获得会话数据。
但我不明白它是如何工作的。这是一个新请求,我在上一个请求中设置了 'username',而不是响应。
尽管未将其设置为上一个响应对象,但我如何从下一个请求对象中获取 'username'?
How could I get 'username' from next request object despite not setting it to previous response object?
会话数据不是由客户端存储,而是由服务器存储。存储在客户端的数据就是cookies。
Django 在浏览器中设置一个默认名为 sessionid
的 cookie(您可以通过更改 SESSION_COOKIE_NAME
setting [Django-doc] 来更改它,因此它包含为该会话存储的会话数据的标识符.
因此,浏览器每次都会向 sessionid
发出请求,如果您访问 request.session
,那么它会查看它存储在数据库中的内容。
您可以更改服务器存储 cookie 的方式以及使用的序列化程序。有关详细信息,请参阅 How to use sessions section of the documentation.
def home(request):
# logged in
if request.user.is_authenticated:
request.session['username'] = str(request.user)
request.session.set_expiry(0)
# anonymous
else:
# how could Django get session data here ?
cur = request.session.get('username', None)
if cur:
pass
else:
anon = random.choice(settings.SESSION_NAMES)
request.session['username'] = anon
request.session.set_expiry(42)
res = render(request, 'ex/home.html', {'username': request.session['username']})
return res
我正在尝试了解会话。在上面的匿名案例中,我将会话数据 'username' 设置为已获取的请求。在下一个请求中(刷新后),我可以获得会话数据。
但我不明白它是如何工作的。这是一个新请求,我在上一个请求中设置了 'username',而不是响应。
尽管未将其设置为上一个响应对象,但我如何从下一个请求对象中获取 'username'?
How could I get 'username' from next request object despite not setting it to previous response object?
会话数据不是由客户端存储,而是由服务器存储。存储在客户端的数据就是cookies。
Django 在浏览器中设置一个默认名为 sessionid
的 cookie(您可以通过更改 SESSION_COOKIE_NAME
setting [Django-doc] 来更改它,因此它包含为该会话存储的会话数据的标识符.
因此,浏览器每次都会向 sessionid
发出请求,如果您访问 request.session
,那么它会查看它存储在数据库中的内容。
您可以更改服务器存储 cookie 的方式以及使用的序列化程序。有关详细信息,请参阅 How to use sessions section of the documentation.