Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 制作Django';s auth跟踪电子邮件,如何将用户名字段与电子邮件关联?_Python_Database_Django_Authentication - Fatal编程技术网

Python 制作Django';s auth跟踪电子邮件,如何将用户名字段与电子邮件关联?

Python 制作Django';s auth跟踪电子邮件,如何将用户名字段与电子邮件关联?,python,database,django,authentication,Python,Database,Django,Authentication,我最初的想法是在创建帐户时简单地将电子邮件地址放入用户名和电子邮件字段中,但这不起作用,因为Django将用户名字段限制为30个字符,这对于电子邮件地址可能不够 我的第二个想法是md5电子邮件地址,将散列放入用户名,这将使其始终是唯一的(从技术上讲,也与电子邮件字段相同)。md5是32个字符,同样,我只有30个字符可以使用 我的第三个想法是将md5哈希末尾的最后两个字符切掉,使其为30个字符,然后按照我计划将其与完整哈希一起使用。但我不知道有多大的可能会出现两个散列,在第30个字符之前是相同的,

我最初的想法是在创建帐户时简单地将电子邮件地址放入用户名和电子邮件字段中,但这不起作用,因为Django将用户名字段限制为30个字符,这对于电子邮件地址可能不够

我的第二个想法是md5电子邮件地址,将散列放入用户名,这将使其始终是唯一的(从技术上讲,也与电子邮件字段相同)。md5是32个字符,同样,我只有30个字符可以使用

我的第三个想法是将md5哈希末尾的最后两个字符切掉,使其为30个字符,然后按照我计划将其与完整哈希一起使用。但我不知道有多大的可能会出现两个散列,在第30个字符之前是相同的,但在第31和32个字符之间是不同的,我已经把它们切掉了


是否有更好的方法将用户名字段的内容与电子邮件地址联系起来,使其始终唯一?

我们开发了一个django应用程序,它将电子邮件存储为用户名。Django内置用户名模型限制为30个字符,适用于90%

为了支持更长的用户名,在不改变django源代码的情况下,我们使用了一个称为longer_username的附加应用程序:

来自django.db.models.signals导入类\u
def用户名(发件人,*args,**kwargs):
#您不能只执行`if sender==django.contrib.auth.models.User`
#因为您必须导入模型
#您必须使用_名称和_模块进行测试__
如果发送方.\uuuu名称.\uuuu==“用户”和发送方.\uuuu模块.\uuu==\
“django.contrib.auth.models”:
发件人。_meta.get_字段(“用户名”)。最大长度=75
类\u已准备好。连接(更长的\u用户名)
我们将此作为第一个应用程序添加到已安装的应用程序中:

INSTALLED_APPS = (
    'longer_username',
    ...
)
就这样。更多信息可在此处找到:


为什么希望它与电子邮件字段相同。为什么不只是一些随机字符串就可以工作呢?为了克服这个限制,人们必须做些什么很有趣——我非常欣赏这个解决方案,它既有创造性又不太俗气。谢谢。这个食谱可以追溯到很久以前。也许现在有更好的方法来实现这一点。至少对我来说是新的——如果你在寻找不同的东西,定制用户对象是可行的,没有猴子补丁或信号滥用:参见