在Django 1.8中," USERNAME_FIELD"认证系统意味着什么?

时间:2017-05-17 14:46:54

标签: python django

我一直在学习Django一周,为了实现身份验证系统,我创建了models.py文件作为教程。

from django.db import models
from django.contrib.auth.models import AbstractBaseUser

class User(AbstractBaseUser):

    username = models.CharField('username', max_length = 10, unique = True, db_index = True)
    email = models.EmailField('email address', unique = True)
    joined = models.DateTimeField(auto_now_add = True)
    is_active = models.BoolenField(default = True)
    is_admin = models.BoolenField(default = False)

    USERNAME_FIELD = 'username'
    def __unicode__(self):
         return self.username

我了解用户名,电子邮件,已加入,is_active,is_admin 的含义,但我无法理解为何使用 USERNAME_FIELD

models.CharField 创建的用户名等于 USERNAME_FIELD '用户名' >

为什么我必须创建 USERNAME_FIELD

def __unicode __(自我):功能是什么意思?

2 个答案:

答案 0 :(得分:2)

根据docs,USERNAME_FIELD是:

  

描述用户模型上用作唯一标识符的字段名称的字符串。这通常是某种用户名,但也可以是电子邮件地址或任何其他唯一标识符。该字段必须是唯一的(即,在其定义中设置unique = True),除非您使用可支持非唯一用户名的自定义身份验证后端。

因此,USERNAME_FIELD指定将哪个模型字段用作用户名。如果您的应用使用的是电子邮件地址而不是用户名,则可以使用USERNAME_FIELD配置该地址。

__unicode__(self)方法返回对象的字符串表示形式。没有它,只要您尝试显示对象,它就会显示为:<User: User object>。正如您现在所拥有的那样,显示用户对象将改为显示用户的用户名。在Django教程part 2中,他们将__str__方法与@python_2_unicode_compatible装饰器结合使用,使其与Python 2一起使用。在Python 3中__str__相当于{{ Python 2中的1}}。

答案 1 :(得分:1)

检查documentation是否有您的Django版本:

  

<强> USERNAME_FIELD

     

描述用户模型上用作唯一标识符的字段名称的字符串。这通常是用户名   某种,但也可以是电子邮件地址,或任何其他独特的   标识符。字段必须是唯一的(即设置为 unique = True   它的定义)。

.row::after { content: ""; clear: both; display: table; } 默认为USERNAME_FIELD,因此如果默认设置适用,您可以跳过在自定义用户模型中设置它。

您可以阅读"username"__str__()方法here