Python Django中webapp的设计思想

Python Django中webapp的设计思想,python,django,web-applications,Python,Django,Web Applications,我正在Django开发一个基于用户的社交网络类型的web应用程序。这是我的第一次,所以我想确保我使用了一些好的实践 目前,web应用程序支持两种用户。这由两个不同的组表示。当我注册一个用户时,我会将他们分配到这两个组中的一个。我也有两个应用程序,每种类型的用户一个。这些应用程序处理特定类型用户所特有的任何事情。我有另一个应用程序处理实际的身份验证。此应用程序使用Django的内置用户类型,并为其分配用户配置文件。这两种不同类型的用户都有自己的配置文件,它们从UserProfile扩展/继承 这工

我正在Django开发一个基于用户的社交网络类型的web应用程序。这是我的第一次,所以我想确保我使用了一些好的实践

目前,web应用程序支持两种用户。这由两个不同的组表示。当我注册一个用户时,我会将他们分配到这两个组中的一个。我也有两个应用程序,每种类型的用户一个。这些应用程序处理特定类型用户所特有的任何事情。我有另一个应用程序处理实际的身份验证。此应用程序使用Django的内置用户类型,并为其分配用户配置文件。这两种不同类型的用户都有自己的配置文件,它们从UserProfile扩展/继承

这工作得相当好,并且是相当可重用的,因为身份验证应用程序可以从url中提取用户类型,并确定要创建的用户类型。由于组的命名很方便,因此也可以将它们添加到正确的组中

  • 这是最好的方法还是有更多的首选、尝试和真实的方法来处理这个问题?这似乎是一个相当普遍的情况。如果不需要的话,我不想继续错误地重新发明轮子
  • 我正在考虑添加另一个名为common的应用程序,或者处理所有用户都通用的东西。例如,查看用户配置文件页面可能是登录的任何人都想做的事情,而不管他们是什么类型的用户
  • 谢谢

    首先是简单的部分,2)你很在行。这将是最简单和最有效的方法。与其在两个应用程序之间复制功能,不如让一个应用程序处理两种用户类型共有的事情

    返回1)

    由于这两个配置文件都是从UserProfile扩展而来的,因此会遇到这样一个问题(如果您在用户对象上使用get_profile(),请参见),即返回的只是一个UserProfile对象,而不知道根据接收到的对象该用户实际上属于哪个组。这是因为它们都扩展了UserProfile,但UserProfile不能(我相信)抽象,因为您希望每个用户都有一个指向UserProfile对象的指针,该对象实际上可能是UserGroup1或UserGroup2对象

    我建议您做的是创建两个独立的模型,它们不从同一个模型扩展(出于必要):Group1和Group2。您可以将两个配置文件共有的信息存储在用户对象的UserProfile中。然后在UserProfile中,您将同时拥有Group1和Group2对象的ForeignKey:

    group1 = models.ForeignKey(Group1, blank=True, null=True)
    
    您必须自己进行逻辑检查,以确保只有一个是有效的(您可以在重写的save()方法或其他方法中执行此操作),但要同时获取用户的所有数据,并知道用户所在的组,您可以执行以下操作:

    User.objects.filter(username='blahblah').select_related('profile', 'profile__group1', 'profile__group2')
    
    只需对数据库进行一次查询,您就可以获得有关用户的所有信息,并且还可以知道用户所在的组(不是“无”组)

    我希望这有帮助


    另外,我在这里假设组之间不仅有唯一的数据,而且还有独特的功能。

    感谢您的见解。这是我刚才遇到的问题。我习惯于java,如果我有继承层次结构,我可以自动获得我想要的子类。我在python中通过向UserProfile添加几个方法克服了这个问题,这些方法允许您检索适当的子类,所以我不担心这一点。我很高兴我在将共性分解成一个单独的应用程序方面是正确的。如果一个用户想要查看另一个用户的配置文件,情况会怎样?有不同类型的用户,那么这应该如何工作呢?您可以从通用应用程序中执行此类视图,然后使用django include template命令根据用户组({%include'group1.html%})呈现组信息,确保从用户的group1和group2的通用视图中传递变量,这样至少有一个是正确的。