将Django用户与Google Apps同步而不进行monkeypatching

时间:2009-01-09 19:49:53

标签: python django google-apps monkeypatching

我正在编写一个Django应用程序,我希望只要在本地创建帐户,就可以使用Provisioning API在我们的Google Apps托管电子邮件上创建帐户。

我只会使用信号,但由于我希望密码可以跨站点同步,因此我使用包装器进行monkeypatched User.objects.create_userUser.set_password分别创建Google帐户和更新密码。

Monkeypatching似乎不赞成,所以我想知道,有没有更好的方法来实现这个目标?

4 个答案:

答案 0 :(得分:1)

您是否考虑过对用户模型进行子类化?这可能会产生一组不同的问题,并且仅适用于较新的版本(不确定何时进行更改,我在主干上)。

答案 1 :(得分:0)

子类化似乎是最好的路径,只要您可以更改所有代码以使用新类。我认为最新版本的Django支持这一点。

答案 2 :(得分:0)

Monkeypatching肯定是坏事。很难说什么,因为你提供的代码/信息很少。但我假设您在某些时候(在视图中,在表单中)以明文形式提供密码,那么为什么不手动同步呢?

答案 3 :(得分:0)

我使用Django 1.0.2对User进行子类化。您基本上创建了另一个链接到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()

然后,您可以轻松覆盖所需的方法。

对于那些没有听说过monkeypatching的人:http://en.wikipedia.org/wiki/Monkey_patch。它是游击补丁的衍生物。