我正在编写一个 Django 应用程序,并且我希望在本地创建帐户时使用 Provisioning API 在我们的 Google Apps 托管电子邮件上创建一个帐户。
我只会使用信号,但由于我希望跨站点同步密码,所以我已经做了猴子补丁User.objects.create_user
并User.set_password
使用包装器来分别创建 Google 帐户和更新密码。
Monkeypatching 似乎不受欢迎,所以我想知道,有没有更好的方法来做到这一点?
我正在编写一个 Django 应用程序,并且我希望在本地创建帐户时使用 Provisioning API 在我们的 Google Apps 托管电子邮件上创建一个帐户。
我只会使用信号,但由于我希望跨站点同步密码,所以我已经做了猴子补丁User.objects.create_user
并User.set_password
使用包装器来分别创建 Google 帐户和更新密码。
Monkeypatching 似乎不受欢迎,所以我想知道,有没有更好的方法来做到这一点?
您是否考虑过对 User 模型进行子类化?这可能会产生一组不同的问题,并且仅适用于较新的版本(不确定更改何时生效,我在主干上)。
猴子补丁绝对是坏事。很难说什么,因为你给出的代码/信息太少了。但是我假设您在某些时候(在视图中,在表单中)有明文密码,那么为什么不手动同步呢?
只要您可以更改所有代码以使用新类,子类化似乎是最佳途径。我认为最新版本的 Django 支持这一点。
我使用 Django 1.0.2 子类化用户。您基本上创建了另一个链接到 user_id 的表。
class User(MyBaseModel):
user = models.OneToOneField(User, help_text="The django created User object")
然后在运行时
@login_required
def add(request) :
u = request.user.get_profile()
然后,您可以轻松地覆盖所需的方法。
对于那些没有听说过猴子补丁的人:http ://en.wikipedia.org/wiki/Monkey_patch 。它是从游击补丁派生的。