Django FSM的日志记录

django-fsm-log的Python项目详细描述


django有限状态机日志

Build StatusCode Healthcodecov

优秀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_descriptiondecorator(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.61.71.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

这样,当存在bykwarg时,就会记录转换。

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaPax考试:从非标准Maven存储库解析Karaf特性存储库(XML文件)   java Spring启动Bean创建异常   java中将ArrayList转换为数组的方法   Android Studio的java Unity插件。   java在CheckStyle中从方法计数中排除getter和setter   HibernateJava。sql。SQLSyntaxErrorException:表/视图“序列”不存在   与命令行程序Java vs C通信   java WebView膨胀异常   java在O(n)java8流中寻找两个列表的交集   java使用Gradle运行单元测试时,最大堆大小在哪里设置?   ssl加载java应用程序(CXF)内的jks文件   CI:Jenkins Git:Simple Java项目:希望在特定时间在脚本上发送消息   java根据位置更改数字   java按数值排序字符串数组   macos java版本“1.6.0_65”是否与java 6模棱两可?   Cassandra中的java时间戳