我正在构建一个我试图保持可插拔的应用程序。唯一的问题是我需要django-mailer
稍微修改一下,以便我的应用程序可以跟踪哪些电子邮件已发送/未发送并可以访问电子邮件内容。
确保这不会与使用 的其他人django-mailer
或我决定为我自己的应用程序分叉/调整的任何其他 python 库冲突的最佳方法是什么?
我应该重命名我的 fork 中的 mailer 及其所有相关导入吗?我错过了一些更容易的东西吗?
我正在构建一个我试图保持可插拔的应用程序。唯一的问题是我需要django-mailer
稍微修改一下,以便我的应用程序可以跟踪哪些电子邮件已发送/未发送并可以访问电子邮件内容。
确保这不会与使用 的其他人django-mailer
或我决定为我自己的应用程序分叉/调整的任何其他 python 库冲突的最佳方法是什么?
我应该重命名我的 fork 中的 mailer 及其所有相关导入吗?我错过了一些更容易的东西吗?
你可以用一个函数来解决它。创建一个同时做这两件事的函数:
或者你可以做一些更重的管道。确保把它记录好,并尽量让其他人不要为了每一个徒劳的目的在家里尝试这个,而是联系 Django 或 Django-mailer 团队并询问他们是否可以安排更好的解决方案。
装饰 django.core.mail 模块中的 EmailMessage 类:确保在成功发送消息时,您想要的信息也会传递到其他地方。
# wrappedmailer.py
from django.core.mail import EmailMessage
class WrappedEmailMessage(object):
def __init__(self, message):
self.__message = message
# more initialization
# override all EmailMessage methods:
# do what you want with what is provided,
# then return self.__message.method(...)
然后当你的应用程序初始化时,在加载 django-mailer 之前,你可以执行以下操作:
import django.core.mail
import newmailer
django.core.mail.EmailMessage = newmailer.WrappedEmailMessage
django.core.mail 模块保留在同一个 Python 进程中的缓存中,因此每当导入 django.core.mail 时,EmailMessage 类实际上就是 WrappedEmailMessage 类。