Django - 如何以最佳方式编写用户和配置文件处理?

时间:2010-04-16 16:43:19

标签: python django profiles

我正在编写简单的网站,需要处理用户和个人资料。第一个初步想法是在用户处理中使用django的构建,但是用户模型太窄并且不包含我需要的字段。该文档提到了用户配置文件,但用户配置文件部分已从djangobook中删除,涵盖django 1.0(理想情况下,该解决方案应与django 1.2一起使用),并且Internet上充满了不同的解决方案,而不是让选择更容易(如用户模型继承,用户配置文件和django信号,等等。

我想知道,如何以良好,现代,快速和安全的方式来写这个。我应该尝试扩展django内置用户模型,还是应该创建自己的用户模型,以保留我需要的所有信息?您可以在下面找到工作解决方案的一些规格和期望:

  • 用户应该能够注册和验证
  • 每个用户都应该拥有个人资料(或包含所有必填字段的模型)
  • 用户不需要django内置管理面板,但他们需要通过简单的网络表单编辑他们的个人资料/模型

请告诉我你如何在应用程序中解决这些问题,以及使用django处理用户的最佳方法是什么。任何文章/博客或代码示例的链接都非常感谢!

4 个答案:

答案 0 :(得分:12)

  

用户应该能够注册和验证

django.contrib.auth是您想要的模块。请务必查看custom login forms.

的文档
  

每个用户都应该拥有个人资料(或包含所有必填字段的模型)

您需要设置settings.AUTH_PROFILE_MODULE,如其他人所述。

有关设置用户个人资料模型的信息适用于the latest version1.11.0。它没有被删除。

  

用户不需要django内置管理面板,但他们需要通过简单的网络表单编辑他们的个人资料/模型

您可以像创建其他任何应用一样创建表单和视图;也许做一个“用户控制面板”应用程序来处理这些事情。然后,您的观点会与django.contrib.auth.models.Userdjango.contrib.auth.models.Group模型进行互动。您可以将其设置为满足您的需求。

编辑:回答你的答案形式的问题(分页Alex Trebek)......

  

第二版djangobook,涵盖django 1.0(接近1.2而不是0.96)不再有任何地方的信息,是什么让我高度困惑 - 有什么改变?是否有其他更好,更安全的方式来处理用户及其个人资料?所以这个问题问了。

我不建议使用djangobook作为参考;这个主题已经过时了。用户配置文件存在,我在我的Django 1.1.1站点中使用它们;我甚至将他们从NIS填充。

请使用我上面提供的链接。它们直接转到实际的Django文档并具有权威性。

  

顺便说一下,我忘了询问,如果您所有人引用的方式(即AUTH_PROFILE_MODULE)将在注册时自动创建

在文档中回答。

  

并且要求配置文件存在于任何操作上(用户现有存在,填充配置文件不应该存在,这就是我考虑以某种方式扩展用户模型的原因)?

如果调用User.get_profile(),则需要存在配置文件。

  

它是否会得到更新(人们在与此主题相关的各种博客上提到'信号')?

它与任何其他模型一样:只有在您更改字段并调用save()时才会更新。

signal部分是您如何挂钩函数来为新用户创建个人资料:

from django.db.models.signals import post_save
from django.contrib.auth import User
from myUserProfileApp import UserProfile

def make_user_profile(sender, **kwargs):
    if 'created' not in kwargs or not kwargs['created']:
        return

    # Assumes that the `ForeignKey(User)` field in "UserProfile" is named "user".
    profile = UserProfile(user=kwargs["instance"])
    # Set anything else you need to in the profile, then...
    profile.save()

post_save.connect(make_user_profile, sender=User, weak=False)

这只会为新用户创建新的个人资料。现有用户需要手动添加配置文件:

$ ./manage.py shell
>>> from django.contrib.auth import User
>>> from myUserProfileApp import UserProfile
>>> for u in User.objects.all():
...  UserProfile(user=u).save() # Add other params as needed.
...

如果您的某些用户有个人资料而某些用户没有,那么您需要做更多的工作:

>>> for u in User.objects.all():
...  try:
...   UserProfile(user=u).save() # Add other params as needed.
...  except:
...   pass

答案 1 :(得分:2)

对我来说,就像当前版本的Django文档和Django这两本书都有相关部分。

答案 2 :(得分:0)

Django支持(自己创建的)UserProfile模型out of the box。您可以在settings.py文件中将其分配为:AUTH_PROFILE_MODULE。话虽如此,我会同意你的看法,起初有点混乱。

我如何处理它是用我想要的字段创建我自己的UserProfile模型,并通过设置(上面)将它挂钩到Django用户模型。我相信这是首选方式,可能比扩展基本用户模型更好。

您可以通过User.get_profile()访问您的个人资料。

github上有几个面向UserProfile的项目。如果你想要一些代码示例,你可以看一下。

答案 3 :(得分:0)

谢谢大家的回答!我知道django dev文档提到用户配置文件,但是非常简短(大约几行)和链接到包含有关用户配置文件的信息的djangobook,但是......到它的第一个版本,覆盖django 0.96。第二版djangobook,涵盖django 1.0(接近1.2而不是0.96)不再有任何地方的信息,是什么让我高度困惑 - 有什么改变?是否有其他更好,更安全的方式来处理用户及其个人资料?所以这个问题问了。