Django的扩展会话后端
项目描述
Django QSessions
django-qsessions 为 Django 提供了两个扩展会话后端。它们扩展了 Django 的 db
和 cached_db
后端(以及 Session
模型),增加了以下额外功能
- 会话有一个外键指向用户
- 会话存储IP和用户代理
这些功能有助于您实现“会话管理”,并向用户显示活动会话列表。您可以显示每个会话的IP、位置和用户代理,并添加撤销会话的选项。
比较
以下是 Django 会话后端(db、cache、cached_db)与 django-qsessions 之间的简要比较。
django | qsessions | ||||
---|---|---|---|---|---|
cache | db | cached_db | db | cached_db | |
性能 | ✔✔ | ✔ | ✔ | ||
持久性 | ✔ | ✔ | ✔ | ✔ | |
外键指向用户 | ✔ | ✔ | |||
存储IP和用户代理 | ✔ | ✔ |
兼容性
- Python: 3.8, 3.9, 3.10, 3.11, 3.12
- Django: 4.2, 5.0
安装
如果您的系统处于生产状态,并且正在使用其他会话后端,则需要手动迁移它们。我们没有迁移脚本。
-
如果您想使用
cached_db
后端,请确保您已经 配置了缓存。如果您在CACHES
中定义了多个缓存,Django 将使用默认缓存。要使用另一个缓存,请将SESSION_CACHE_ALIAS
设置为该缓存的名称。 -
从 PyPI 安装最新版本
pip install django-qsessions
-
在设置中
- 在
INSTALLED_APPS
中将'django.contrib.sessions'
替换为'qsessions'
。 - 在
MIDDLEWARE
或MIDDLEWARE_CLASSES
中将'django.contrib.sessions.middleware.SessionMiddleware'
替换为'qsessions.middleware.SessionMiddleware'
。 - 将
SESSION_ENGINE
设置为'qsessions.backends.cached_db'
如果您想使用cached_db
后端。'qsessions.backends.db'
如果您想使用db
后端。
- 在
-
运行迁移以创建
qsessions.models.Session
模型。python manage.py migrate qsessions
要启用使用 GeoIP2 的位置检测(可选)
-
安装
geoip2
包pip install geoip2
-
将
GEOIP_PATH
设置为存储 GeoIP2 数据库的目录。 -
运行以下命令下载最新的 GeoIP2 数据库。您可以将其添加到 cron 作业以自动更新 GeoIP2 数据库。由于 Maxmind 许可证变更,您将需要获取并使用许可证密钥来下载数据库。您可以在命令行中传递密钥或在
MAXMIND_LICENSE_KEY
环境变量中设置。python manage.py download_geoip_db -k mykey
用法
django-qsessions 有一个自定义的 Session
模型,具有以下额外字段:user
、user_agent
、created_at
、updated_at
、ip
。
获取用户的会话
user.session_set.filter(expire_date__gt=timezone.now())
删除会话
# Deletes the session from both the database and the cache.
session.delete()
注销用户
user.session_set.all().delete()
获取会话创建时间(用户登录时间)
>>> session.created_at
datetime.datetime(2018, 6, 12, 17, 9, 17, 443909, tzinfo=<UTC>)
获取 IP 和用户代理
>>> session.ip
'127.0.0.1'
>>> session.user_agent
'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Mobile Safari/537.36'
获取用户设备(解析用户代理字符串)
>>> str(session.device())
'K / Android 10 / Chrome Mobile 118.0.0'
>>> session.device().device
Device(family='K', brand='Generic_Android', model='K')
>>> session.device().os
OperatingSystem(family='Android', version=(10,), version_string='10')
>>> session.device().browser
Browser(family='Chrome Mobile', version=(118, 0, 0), version_string='118.0.0')
如果您已配置 GeoIP2,则可以使用 .location()
和 .location_info()
获取位置信息
>>> session.location()
'Tehran, Iran'
>>> session.location_info()
{'city': 'Tehran', 'continent_code': 'AS', 'continent_name': 'Asia', 'country_code': 'IR', 'country_name': 'Iran', 'time_zone': 'Asia/Tehran', ...}
管理页面
注意事项
session.updated_at
不是会话的确切最后活动时间。每次在数据库中保存会话对象时都会更新它。(例如,当用户登录或当 ip、用户代理或会话数据更改时)
为什么不使用 django-user-sessions
?
django-user-sessions 有相同的功能,但仅扩展了 db
后端。使用缓存可以提高性能。
我们从 django-user-sessions 中获得了想法和一些代码。感谢 Bouke Haarsma 为编写 django-user-sessions 所做的工作。
开发
- 创建并激活一个 python 虚拟环境。
- 使用
pip install -e '.[dev]'
在虚拟环境中安装开发依赖项。 - 使用
pre-commit install
安装 pre-commit 钩子。 - 使用覆盖率运行测试
py.test --cov
待办事项
- 编写更好的文档。
- 解释它是如何工作的(概述)
- 向现有文档添加更多详细信息。
- 编写更多测试
- 性能基准(并与 Django 的
cached_db
进行比较)
欢迎贡献!
许可证
MIT
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分发
构建的版本
django_qsessions-1.1.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a064349a6f2dbe62afe0c0b86af39407423e1927d9c136d5637dd10755c86f61 |
|
MD5 | ae81209af417f6c325b3ece028bd85d8 |
|
BLAKE2b-256 | 4a1b8a33c3bf195abc92dc4cd1efe10edaea198f1a2fdd261b4359d040c5dc65 |
django_qsessions-1.1.5-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6c64aa4532344b07a242c2ce008163420452b9e31155fa03bb954ac8120c1658 |
|
MD5 | d2975380a046021a0c44c0675cd84e4b |
|
BLAKE2b-256 | cdd8eceb9749dec28148e2e70359860c8f296ba57bea01de45b44ac0fba3d195 |