【问题标题】:In Django 1.8, what does "USERNAME_FIELD" mean by authentication system?在 Django 1.8 中,身份验证系统中的“USERNAME_FIELD”是什么意思?
【发布时间】:2017-05-17 14:46:53
【问题描述】:

我已经学习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

我了解用户名、电子邮件、joined、is_active、is_admin 是什么意思,但我不明白为什么要使用 USERNAME_FIELD

models.CharField 创建的username 是否等于USERNAME_FIELD 中的'username'

为什么我必须创建 USERNAME_FIELD

def __unicode__(self):函数是什么意思?

【问题讨论】:

    标签: python django


    【解决方案1】:

    根据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 中的 __unicode__

    【讨论】:

    • 感激不尽。你能告诉我外键吗?我无法理解 ForeignKey 的确切含义。
    • 外键是对表中行的引用。这是一种链接两行的方法。这是一个可能有帮助的问题:stackoverflow.com/questions/655446/…
    【解决方案2】:

    检查 documentation 以获得您的 Django 版本:

    USERNAME_FIELD

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

    USERNAME_FIELD 默认为 "username",因此如果默认设置适合您,您可以跳过在自定义用户模型中设置它。

    您可以阅读__str__()__unicode__() 方法here

    【讨论】:

    • 感谢您的帮助。你能更准确地解释一下吗?感谢您的款待。
    猜你喜欢
    • 2020-11-12
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多