django自定义字段实现策略模式

django-strategy-field的Python项目详细描述


用于用django模型实现Strategy Pattern的自定义字段集。

这些策略在选择框中显示为标准选择字段

此软件包提供以下自定义字段:

  • 战略领域
  • 多个字段
  • 战略类字段
  • 多个类别密码字段

StrategyField可以作为带有属性的模型的实例来访问 context指向“拥有”字段的模型(逆关系)。所以:

示例

fromstrategy_field.fieldsimportStrategyFieldfromdjango.core.mail.backends.filebased.EmailBackendclassEvent(models.Model):backend=StrategyField()Event(sender='django.core.mail.backends.filebased.EmailBackend')

用例

例如,我们可以想象一个管理需要通知用户的事件的应用程序。 可以使用不同的传输方式(电子邮件、短信等)通知事件的每个发生。 我们希望能够添加/更改发送通知的方式,基于每个事件,只需使用 Django管理面板。

fromstrategy_field.fieldsimportStrategyFieldfromstrategy_field.registryimportRegistryclassTransportRegistry(Registry)passclassAbstractStrategy(object):def__init__(self,context):self.context=contextdefsend(self):raiseNotImplementedErrorclassEmailStrategy(AbstractTransport):defsend(self):...classSMSStrategy(AbstractTransport):defsend(self):...registry=TransportRegistry(AbstractTransport)registry.register(EmailStrategy)registry.register(SMSStrategy)classEvent(models.Model):sender=StrategyField(registry)Event.objects.get_or_create(sender=EmailStrategy)......e=Event.objects.get(sender=EmailStrategy)e.sender.send()# e.sender.context == e

更多示例

使用可调用的
fromstrategy_field.fieldsimportStrategyFieldfromstrategy_field.registryimportRegistryregistry1=Registry()registry2=Registry()classA(model):sender=StrategyField(registry=lambdamodel:model._registry)classMeta:abstract=TrueclassC1(A):_registry=registry1classMeta:abstract=TrueclassC2(A):_registry=registry2classMeta:abstract=True

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

推荐PyPI第三方库


热门话题
java如何在用户输入的基础上使用applet绘制线条?在g为null的状态下发生的错误,如何修复   java频率源   java无法单击使用Selenium WebDriver创建的<div>下拉列表   java Wildfly 15在不同的机器上运行时不创建集群   Java:比较3个数字。得到他们中最伟大的   java与Maven/Hudson和TestNG一起使用多个类   java发生JNI错误(jdeveloper12c)   java在现实生活中同步多线程程序中的方法有什么意义   java Glassfish嵌入式JNDI模块范围查找   windows使用WMIC优雅地杀死Java进程   午夜(上午12点)java更新小部件失败   java无法解析方法“registerListener(com.xxx.xxx.MainActivity,安卓.hardware.SensorManager,int)”   java Hibernate版本属性在更改时调用自动更新?   java创建新线程是否会产生刷新缓存的副作用?   java saveAsTextFile性能改进   java如何自动化新的Facebook注册弹出窗口?   来自现有RDD的java Spark流媒体   AES256 OpenSSL C++和java加密:解密时的BADPADION异常