扩展django的缓存数据库会话后端
django-qsessions的Python项目详细描述
django qsessions是django的会话后端,它扩展了django的cached_db会话后端 以及Session模型以添加以下功能:
- 会话对用户具有外键
- 会话存储IP和用户代理
比较
这里是django的会话后端(db、cache、cached-db)、django-user-sessions和django-qsessions之间的简要比较。
db | cache | cached_db | django-user-sessions | django-qsessions | |
---|---|---|---|---|---|
Better Performance | ✔✔ | ✔ | ✔ | ||
Persistent | ✔ | ✔ | ✔ | ✔ | |
Foreign Key to User | ✔ | ✔ | |||
Store IP and User Agent | ✔ | ✔ |
兼容性
Python version | Django versions |
---|---|
3.7 | 2.0, 2.1, 2.2 |
3.6 | 1.10, 1.11, 2.0, 2.1, 2.2 |
3.5 | 1.10, 1.11, 2.0, 2.1, 2.2 |
3.4 | 1.10, 1.11, 2.0 |
2.7 | 1.10, 1.11 |
安装
请注意,如果您的系统正在生产,并且有很多活动会话 使用另一个会话后端,您需要手动迁移它们。我们没有迁移脚本。
首先,确保你已经configured your cache。如果在中定义了多个缓存 CACHES,django将使用默认缓存。要使用另一个缓存,请设置SESSION_CACHE_ALIAS 以缓存的名称命名。
从pypi安装最新版本:
pip install django-qsessions
在“设置”中:
- 在INSTALLED_APPS中,用'qsessions'替换'django.contrib.sessions'。
- 在MIDDLEWARE或MIDDLEWARE_CLASSES替换中 'django.contrib.sessions.middleware.SessionMiddleware'带 'qsessions.middleware.SessionMiddleware'。
- 将SESSION_ENGINE设置为'qsessions.backends.cached_db'。
运行迁移以创建qsessions.models.Session模型。
python manage.py migrate qsessions
使用geoip2启用位置检测(可选):
安装geoip2包:
pip install geoip2
将GEOIP_PATH设置为存储geoip2数据库的目录。
运行以下命令下载最新的geoip2数据库。可以将此命令添加到cron 自动更新geoip2 db的作业。
python manage.py download_geoip_db
用法
django qsessions有一个具有以下字段的自定义Session模型: user,user_agent,created_at,updated_at,ip。
获取用户会话:
user.session_set.filter(expire_date__gt=timezone.now())
删除会话:
# Deletes session from both DB and cachesession.delete()
注销用户:
user.session_set.all().delete()
会话创建时间(用户登录时间):
>>>session.created_atdatetime.datetime(2018,6,12,17,9,17,443909,tzinfo=<UTC>)
IP和用户代理:
>>>session.ip'127.0.0.1'>>>session.user_agent'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
如果您已经配置了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用户会话中得到了一些想法和代码。 非常感谢Bouke Haarsma编写django用户会话。
开发
- 使用pip install -e'.[dev]'
- 使用py.test --cov . 运行覆盖率测试
待办事项
- 编写更好的文档。
- 解释它的工作原理(总结)
将更多的细节添加到现有文档中。
欢迎投稿!
许可证
麻省理工学院