我正在尝试做这些提议的信号装饰器.除了有一个装饰器将装饰方法连接到一个信号(信号的发送者作为装饰器的参数),我想在类方法上使用装饰器.
我想像这样使用装饰器:
class ModelA(Model):
@connect.post_save(ModelB)
@classmethod
def observe_model_b_saved(cls, sender, instance, created, **kwargs):
# do some stuff
pass
Run Code Online (Sandbox Code Playgroud)
装饰者是:
from django.db.models import signals
def post_save(sender):
def decorator(view):
signals.post_save.connect(sender=sender, receiver=view)
return view
return decorator
Run Code Online (Sandbox Code Playgroud)
我这样做的错误是:
File "/Library/Python/2.6/site-packages//lib/python2.6/site-packages/django/dispatch/dispatcher.py", line 78, in connect AssertionError: Signal receivers must be callable.
我想问题是@classmethod返回一个不可调用的类方法对象.我真的不明白它是如何classmethod工作的,但我从这个参考页面推测,类方法对象在从类中访问之前不会被转换为可调用的,例如ModelA.observe_model_b_saved.有没有什么办法我可以(1)将我的方法定义为模型上的类或实例方法,以及(2)直接在方法定义上使用装饰器将其连接到信号?谢谢!
自 2020 年 4 月起,AWS 支持 SES(简单电子邮件服务)的 VPC 终端节点。尽管如此,我还是无法使用该终端节点让 Lambda 与 SES 进行通信。它总是超时。也许这是因为 SES VPC Endpoints 仅支持 VPC 中的 EC2 实例,而不支持 Lambdas?
我使用 Terraform 描述了我的基础设施,如本要点中所述。 ses_lambda.tf定义基础设施并基本实现本指南。 sesTest.js是我的 Lambda 函数。terraform-show.out显示terraform show只限于由 定义的资源的结果ses_lambda.tf。
正如您在 中看到的ses_lambda.tf,SES 端点的安全组允许来自 VPC 的 CIDR 块中任何 IP 的任何 SMTP 端口(25、465、587、2465 或 2587)上的所有流量。所以我很困惑为什么这不起作用......
我有一种情况,我想在一些Windows shell特殊文件夹(对应于CSIDL枚举中的值)上执行特殊处理.(我的解决方案必须与WinXP兼容.)我遇到的问题是当我遇到IShellFolders时我沿着heirarchy工作,我找不到将IShellFolders与CSIDL相匹配的方法.
这是我目前的做法:
将csidlToFromFullPIdl所有CSIDL 的静态一对一数据结构()初始化为其返回的pIDL SHGetSpecialFolderLocation.
foreach (CSIDL csidl in Enum.GetValues(typeof(CSIDL))
{
IntPtr fullPIdl = IntPtr.Zero;
int hResult = ShellApi.SHGetSpecialFolderLocation(IntPtr.Zero, csidl, ref fullPIdl);
if (hResult != 0)
Marshal.ThrowExceptionForHR(hResult);
csidlToFromFullPIdl.Add(csidl, fullPIdl);
}
Run Code Online (Sandbox Code Playgroud)
使用Desktop IShellFolder启动heirarchy:
int hResult = ShellApi.SHGetDesktopFolder(ref _shellFolder);
hResult = ShellApi.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.CSIDL_DESKTOP, ref _fullPIdl);
Run Code Online (Sandbox Code Playgroud)
像这样检索孩子:
hResult = _shellFolder.EnumObjects(IntPtr.Zero, SHCONTF.SHCONTF_FOLDERS, out pEnum);
// Then repeatedly call:
pEnum.Next(1, out childRelativePIdl, out numberGotten);
Run Code Online (Sandbox Code Playgroud)
为孩子们构建新的完全合格的pIDL,如下所示:
_fullPIdl = ShellApi.ILCombine(parentFullPIdl, childRelativePIdl);
Run Code Online (Sandbox Code Playgroud)
(最后,使用:)检索孩子的IShellFolder
hResultUint = parentShellItem.ShellFolder.BindToObject(childRelativePIdl, IntPtr.Zero, ShellApi.IID_IShellFolder, out _shellFolder);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是childRelativePIdl和_fullPIdl都不对应于任何pIDL csidlToFromFullPIdl.
TIA. …
(Django 1.x,Python 2.6.x)
我有以下模型:
class Animal(models.Model):
pass
class Cat(Animal):
def __unicode__(self):
return "This is a cat"
class Dog(Animal):
def __unicode__(self):
return "This is a dog"
class AnimalHome(models.Model):
animal = models.ForeignKey(Animal)
Run Code Online (Sandbox Code Playgroud)
我没有实例化动物,因为这应该是一个虚拟类.我已经实例化了Cats and Dogs,但是在AnimalHome的Admin Page中,我对Animal的选择显示为"Animal object"(我猜是默认的__unicode __()),而不是我为两个子类定义的__unicode__.救命.
我想,抽象的基类问题是这个问题的一个问题.即使Animal不应该是抽象的,我仍然有一个问题,由于某种原因,由于ForeignKey是在Animal上定义的而不是其子类之一,因此调用了超类方法而不是子类.在OO编程中,当你调用object.method()时,你应该得到最低子类的实现,你必须做额外的工作来获得任何超类的实现.那么为什么在子类上定义__unicode__是不够的---实际上问题可能是__unicode__根本没有被调用,因为对Animal类的内省显示它没有被定义.所以,如果我为Animal定义__unicode__并让它调用子类'
好的,我认为我理解ORM问题.这两个答案都帮助我理解了这一点,谢谢.在尝试这个时,我发现当Django保存子类模型时,它会做两件事:(1)它为超类表中的子类对象创建一行,(2)它使子类表中的PK与超类表中指定的PK.子类表中的这个PK名为superclass_ptr.基于此,我编造了以下内容.我很感激反馈.
Class Animal(models.Model)
def __unicode__(self):
if Dog.objects.filter(pk=self.pk).count() > 0:
return unicode(Dog.objects.get(pk=self.pk))
elif Cat.objects.filter(pk=self.pk).count() > 0:
return unicode(Cat.objects.get(pk=self.pk))
else:
return "An Animal!"
Run Code Online (Sandbox Code Playgroud)
劳伦斯似乎最关注这个问题.Cat和Dog将有不相交的PK集(并且Animal的任何子类将具有与其超类的记录相同的PK),但不幸的是Django不会在幕后执行任何工作:"我是动物.我知道动物有狗和猫的子类.具体来说,我是动物3号,而且我刚刚检查过,它也是一个Cat 3号.这意味着我实际上是Cat 3号.尽管这看起来完全可能且非常合理(因为Cat不会做任何动物无法做到的事情)使用Python的内省.谢谢你们.
django ×2
python ×2
amazon-ses ×1
amazon-vpc ×1
aws-lambda ×1
c# ×1
decorator ×1
django-admin ×1