django用户的用户名和电子邮件相同吗?

时间:2016-12-30 01:09:45

标签: python django django-models django-users

我正在使用django-registration软件包创建一个django网站。我希望用户注册他们的电子邮件并且没有用户名,这样我就可以拥有一个带有实际名称的界面(比如在Facebook上),并通过他们的电子邮件跟踪它们。

我将需要一个用户个人资料,并计划稍后使用oneToOne字段扩展用户模型,但目前我不确定如何将他们的电子邮件用作用户名。我想我可以简单地询问用户他们的电子邮件,并将其存储为用户名,这将是一个简单的修复。但是,它需要我修改所有表单,并在数据库中创建基本上重复的列(email = username)。

这个问题真的是开放式的,我想知道是否有一种简单的方法来改变项目中的用户模型。我已经阅读了有关User(AbstractUser)类的文档,但只有在我们刚刚启动项目时这似乎才有用。

谢谢,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以通过扩展AbstractBaseUser来编写自定义用户类,并将您的电子邮件字段声明为USERNAME_FIELD,如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            XElement art = doc.Descendants("art").Where(x => (string)x.Attribute("code") == "0356").FirstOrDefault();
            art.SetAttributeValue("instock", "456");

            doc.Save(FILENAME);
        }
    }
}

另一个不扩展AbstractBaseUser的工作可以在apps.py中导入用户模型并设置USERNAME_FIELD,如:

USERNAME_FIELD = 'email'