📜  Django-会话(1)

📅  最后修改于: 2023-12-03 15:00:27.645000             🧑  作者: Mango

Django 会话

Django 会话是一种在 Web 应用程序中用于存储用户数据的机制。通过 django.contrib.sessions 应用程序,Django 在后端管理这些会话,使得开发人员可以轻松地将用户信息存储在会话中。

配置会话

要使用 Django 会话功能,您需要打开 settings.py 文件并在 INSTALLED_APPS 中添加 'django.contrib.sessions' 应用程序。然后,在 MIDDLEWARE 中添加 'django.contrib.sessions.middleware.SessionMiddleware' 中间件类。

INSTALLED_APPS = [
    ...
    'django.contrib.sessions',
    ...
]

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]
存储数据

要将数据存储在会话中,您需要访问 request.session 对象,这是一个类似于 Python 字典的对象。

def my_view(request):
    # 存储数据
    request.session['username'] = 'john'
    request.session['email'] = 'johndoe@example.com'
获取数据

要获取存储在会话中的数据,您只需从 request.session 对象中读取相应的键。

def my_view(request):
    # 读取数据
    username = request.session['username']
    email = request.session['email']

请注意,如果指定的键不存在,会引发 KeyError 异常。如果您不想使应用程序失败,可以使用 get() 方法获取数据而不是从字典中读取。

def my_view(request):
    # 读取数据,如果键不存在则返回 None
    username = request.session.get('username')
    email = request.session.get('email')
删除数据

要从会话中删除数据,您可以使用 del 关键字。

def my_view(request):
    # 删除数据
    del request.session['username']

您还可以使用 pop() 方法删除数据并返回该数据。如果键不存在,则 pop() 方法会引发 KeyError 异常。

def my_view(request):
    # 删除数据并返回
    username = request.session.pop('username', None)
设置过期时间

默认情况下,Django 会话在关闭浏览器后仍然存在,并且在服务器上一段时间后才过期。您可以通过在 settings.py 中设置 SESSION_COOKIE_AGE 来覆盖这个时间。

SESSION_COOKIE_AGE = 60 * 60 * 24 * 7  # 一周

您还可以使用 set_expiry() 方法设置会话的过期时间。

def my_view(request):
    # 设置过期时间为一周
    request.session.set_expiry(60 * 60 * 24 * 7)
更改会话存储后端

默认情况下,Django 将会话数据存储在数据库中。但是,您可以选择将会话数据存储在其他位置,例如缓存或文件系统中。要更改会话存储后端,您需要在 settings.py 文件中设置 SESSION_ENGINE。

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
结论

Django 会话是一种非常有用的机制,可帮助存储用户数据。通过使用 SessionMiddleware 和 request.session 对象,您可以轻松地将用户信息存储在会话中,并在需要时访问它们。如果您希望进一步学习 Django 会话,请参阅官方文档。