未提供项目描述
项目描述
一组有用的自定义字段,可用于使用Django模型实现策略模式。
策略以标准选择字段的形式显示在SelectBoxes中
此软件包提供以下自定义字段
StrategyField
MultipleStrategyField
StrategyClassField
MultipleStrategyClassField
StrategyField可以像模型实例一样访问,它有一个指向“拥有”字段的模型(反向关系)的属性context。因此
示例
from strategy_field.fields import StrategyField
from django.core.mail.backends.filebased.EmailBackend
class Event(models.Model):
backend = StrategyField()
Event(sender='django.core.mail.backends.filebased.EmailBackend')
用例
例如,我们可以想象一个管理需要通知用户的事件的应用程序。每个事件的每次发生都可以使用不同的传输方式(电子邮件、短信等)进行通知。我们希望能够通过Django管理面板简单地按事件添加/更改发送通知的方式。
from strategy_field.fields import StrategyField
from strategy_field.registry import Registry
class TransportRegistry(Registry)
pass
class AbstractStrategy(object):
def __init__(self, context):
self.context = context
def send(self):
raise NotImplementedError
class EmailStrategy(AbstractTransport):
def send(self):
...
class SMSStrategy(AbstractTransport):
def send(self):
...
registry = TransportRegistry(AbstractStrategy)
registry.register(EmailStrategy)
registry.register(SMSStrategy)
class Event(models.Model):
sender = StrategyField(registry=registry)
Event.objects.get_or_create(sender=EmailStrategy)
...
...
e = Event.objects.get(sender=EmailStrategy)
e.sender.send() # e.sender.context == e
更多示例
使用可调用函数
from strategy_field.fields import StrategyField
from strategy_field.registry import Registry
registry1 = Registry()
registry2 = Registry()
class A(model):
sender = StrategyField(registry=lambda model: model._registry)
class Meta:
abstract = True
class C1(A):
_registry = registry1
class Meta:
abstract = True
class C2(A):
_registry = registry2
class Meta:
abstract = True
项目链接
稳定 |
||||
开发 |
||||
项目主页 |
||||
问题跟踪器 |
||||
下载 |
项目详情
关闭
django-strategy-field-3.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a355aa9b944da488644cfb7a0c7e96a155ddf241c65adb22003789df02a1c030 |
|
MD5 | b1a92ea61ca4d5f0379df40a895c7a6a |
|
BLAKE2b-256 | 43cd146f06b2d823aba26d0a650ffa78f9a489ea26d0860e82816e781fcf09b5 |