【发布时间】:2017-07-18 12:24:26
【问题描述】:
我知道超级用户和普通用户都只是 django 的用户对象,但是我如何编写一个自定义用户类,它需要普通用户的一些字段而超级用户不需要这些字段?
【问题讨论】:
标签: python django python-2.7 django-models
我知道超级用户和普通用户都只是 django 的用户对象,但是我如何编写一个自定义用户类,它需要普通用户的一些字段而超级用户不需要这些字段?
【问题讨论】:
标签: python django python-2.7 django-models
数据库中没有任何结构是棘手的。例如,当应用程序增长时,JSONFields 可能会变得非常难以驯服。
我会尝试让它“简单”——更易于维护(我想如果您需要做类似的事情,您可能希望在未来扩展模型)。如果这是一个新项目,您可以轻松change the default user model。但这可能会或可能不会帮助您处理您的案件。
你总是可以制作两个模型:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
class Mortal(AbstractBaseUser):
is_superuser = False
username = models.CharField(max_length=256)
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
class Admin(AbstractBaseUser):
is_superuser = True
username = models.CharField(max_length=256)
然后make your own authentication backend:
class MyBackend(object):
"""
Danger! A backend to authenticate only via username
"""
def authenticate(self, username=None):
try:
return Mortal.objects.get(username=username)
except Mortal.DoesNotExist:
try:
return Admin.objects.get(username=username)
except Admin.DoesNotExist:
return None
【讨论】:
您可以为用户创建一个带有外键的配置文件类(例如 UserProfile),该类仅在用户使用网站的注册表单注册时创建。这样,在管理站点或通过命令行创建的超级用户不需要附加额外的配置文件实例。
【讨论】: