mwj*_*son 10 python django django-models django-apps
我们在Django 1.9应用程序中使用了第三方库.我们想要使用一些不在原始应用程序中的功能(针对MongoDB)来修改该应用程序.我们目前通过我们自己的原始库的fork来实现这一点,但是希望使更改更加正交,以便最终可以将它们拉到上游.
我们已经尝试在应用程序期间进行修补,config ready()但模型导入在此调用之前处理django.apps.registry.populate(),并在\__init__遭受困难时执行apps_ready == False.执行此操作的生命周期中最好的部分是什么?
class MongoConfig(AppConfig):
def __init__(self, app_name, app_module):
super(MongoConfig, self).__init__(app_name, app_module)
for p in patches:
patch(*p)
def patch(old, new):
old_module, old_item = split_mod(old)
new_module, new_item = split_mod(new)
print('patching {0} with {1}'.format(old, new))
old_module = import_module(old_module)
new_module = import_module(new_module)
setattr(old_module, old_item, getattr(new_module, new_item))
Run Code Online (Sandbox Code Playgroud)
小智 0
猴子补丁是一种黑客行为,难以维护,应该避免。
原则是在导入代码之前、在加载 Django 本身之前修补代码。根据您的入口点,您将找到修补代码的正确位置。
使用 Django 1.9 我可以考虑两个入口点:
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |