Django FSM的日志记录
django-fsm-log的Python项目详细描述
django有限状态机日志
优秀Django FSM的自动日志记录 包裹。
可以在转换发生之前和将日志持久化到数据库之前访问日志 通过启用缓存的后端。见Advanced Usage
更改日志
1.7.0(未发布)
1.6.2(2019-01-06)
- 地址迁移历史中断添加在1.6.1中
1.6.1(2018-12-02)
- 使statelog.description字段为空
1.6.0(2018-11-14)
- 在转换时添加源状态
- 用fsmintegerfield(63)修复了
get_state_display
- 修正了目标为“无”(71)时转换的处理方式
- 添加了
fsm_log_description
decorator(1,67) - 放弃对django 1.10的支持(64)
1.5.0(2017-11-29)
- 清除不推荐使用的代码。
- 添加codecov支持。
- 切换到pytest。
- 添加管理集成以可视化过去的转换。
1.4.0(2017-11-09)
- 带来与django 2.0的兼容性,并放弃对不受支持版本的支持
django的:
1.6
,1.7
,1.9
。
兼容性
- python 2.7和3.4+
- Django 1.8+
- Django FSM 2+
安装
首先,用pip安装包。这将自动安装 可能缺少依赖项
pip install django-fsm-log
注册django_fsm_登录django应用程序列表:
INSTALLED_APPS=(...,'django_fsm_log',...,)
然后迁移应用程序以创建数据库表
python manage.py migrate django_fsm_log
用法
应用程序监听django_fsm.signals.post_transition
信号并
为每个转换创建新记录。
查询日志:
fromdjango_fsm_log.modelsimportStateLogStateLog.objects.all()# ...all recorded logs...
禁用特定型号的日志记录
默认情况下,会为所有模型记录转换。可以为禁用日志记录
通过将其完全限定名添加到DJANGO_FSM_LOG_IGNORED_MODELS
的特定模型。
DJANGO_FSM_LOG_IGNORED_MODELS=('poll.models.Vote',)
for_
管理器方法
为了方便起见,有一个自定义的for_
管理器方法可以方便地过滤泛型外键:
frommy_app.modelsimportArticlefromdjango_fsm_log.modelsimportStateLogarticle=Article.objects.all()[0]StateLog.objects.for_(article)# ...logs for article...
by
装饰器
我们发现我们的转换通常由用户调用,因此我们添加了 使日志记录变得简单的装饰程序:
fromdjango.dbimportmodelsfromdjango_fsmimportFSMField,transitionfromdjango_fsm_log.decoratorsimportfsm_log_byclassArticle(models.Model):state=FSMField(default='draft',protected=True)@fsm_log_by@transition(field=state,source='draft',target='submitted')defsubmit(self,by=None):pass
这样,当存在by
kwarg时,就会记录转换。
article=Article.objects.create()article.submit(by=some_user)# StateLog.by will be some_user
管理集成
有一个可用于显示更改历史记录的内联表单。
要使用它,请通过在其内联线中添加StateLogInline
来扩展您自己的AdminModel
:
fromdjango.contribimportadminfromdjango_fsm_log.adminimportStateLogInline@admin.register(FSMModel)classFSMModelAdmin(admin.ModelAdmin):inlines=[StateLogInline]
高级使用
您可以通过打开状态日志记录的缓存来更改此应用程序的行为。
只需将DJANGO_FSM_LOG_STORAGE_METHOD = 'django_fsm_log.backends.CachedBackend'
添加到项目的设置文件中。
默认情况下,它将使用项目的默认缓存后端。如果希望使用特定的缓存后端,可以添加到
您的项目设置:
DJANGO_FSM_LOG_CACHE_BACKEND='some_other_cache_backend'
statelog对象现在在django_fsm.signals.pre_transition
之后可用。
信号被触发,但从缓存中删除,并在django_fsm.signals.post_transition
之后持久化到数据库。
被解雇了。
如果:
- 您需要立即访问statelog详细信息,并且不能等到
django_fsm.signals.post_transition
已被解雇 - 在任何阶段,都需要验证statelog是否已写入数据库
可以通过pending_objects
管理器访问挂起的状态日志记录
fromdjango_fsm_log.modelsimportStateLogarticle=Article.objects.get(...)pending_state_log=StateLog.pending_objects.get_for_object(article)
运行测试
pip install tox tox