ken*_*der 12 python django django-models
默认的Django User
模型有一些我不需要的字段和验证规则.我想让注册尽可能简单,即需要电子邮件或用户名或电话号码 - 所有这些都是唯一的,因此作为用户标识符很好.
我也不喜欢在Django用户模型中验证的用户名的默认字符集.我想在那里允许任何角色 - 为什么不呢?
之前我使用了用户配置文件django应用程序向用户添加了一个配置文件 - 但这次我宁愿让这个类变得更像.但是我仍然希望使用User
该类,因为它为我提供了一种简单的方法来限制只为登录用户的站点部分.
我该怎么做?
您可以直接重新调整现有字段的用途,而不是直接修改User类或进行子类化.
对于一个站点,我使用"first_name"字段作为用户的"公开显示的名称",并将其中的细分版本填入"用户名"字段(用于URL).我写了一个自定义身份验证后端,允许人们使用他们的"公共名称"或他们的电子邮件地址登录,并且我在注册时强制执行这两者的唯一性.这与其他可重用的应用程序很好地兼容,并且不会引入额外的表或查询.
对于另一个网站,我根本不需要用户名,只需要唯一的电子邮件.为了满足Django对唯一用户名的需求,我只是对电子邮件地址进行了哈希处理并将其用作用户名(您必须对哈希进行base64编码以将其压缩到30个字符以下).自定义身份验证后端以允许使用电子邮件登录.
如果向后兼容性不是问题,那么我希望看到django.contrib.auth和User模型有很多改进,以使它们更加灵活.但是你可以在目前的限制中做很多事情,只需要一点创造力.
Django用户模型的结构非常合理.例如,您真的不想允许用户名中的任意字符,并且有一些方法可以实现电子邮件地址登录,而不会破坏对基本模型的更改.
为了简单地在用户帐户周围存储其他信息,Django支持用户配置文件的概念.虽然你不需要依赖内置的支持来处理这个问题,但这是一个常见的惯例,它可以让你在以太网中漂浮的可重用Django应用程序中发挥出色.有关更多信息,请参阅此处.
如果你想真正修改核心用户模型,但也想要依赖它的可重复使用的应用程序"玩得很好",你就会打开一些潘多拉盒子.开发人员对核心库的结构做出基本假设,因此任何更改都可能导致意外破坏.尽管如此,您可以对基本模型进行monkeypatch更改,或在本地分支Django的副本.我会劝阻后者,如果你知道你在做什么,只推荐前者.
我误解了这个问题.希望这篇文章对其他人有帮助.
#in models.py
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.ForeignKey(User)
#other fields here
def __str__(self):
return "%s's profile" % self.user
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)
#in settings.py
AUTH_PROFILE_MODULE = 'YOURAPP.UserProfile'
Run Code Online (Sandbox Code Playgroud)
每次创建用户时,这将创建一个userprofile.然后你可以使用
user.get_profile().whatever
Run Code Online (Sandbox Code Playgroud)
以下是来自文档的更多信息
http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
归档时间: |
|
查看次数: |
11002 次 |
最近记录: |