【发布时间】:2016-12-05 20:13:03
【问题描述】:
使用 Django 1.10 我想允许在用户名中使用 \ 字符,因为我正在使用 'django.contrib.auth.middleware.RemoteUserMiddleware' 的 Windows 环境中工作,并且远程用户以域\用户名的形式出现(我不想删除该域,因为它用于某些业务逻辑)。
我可以很容易地更改 django\contrib\auth\validators.py 并通过将 regex = r'^[\w.@+-]+$' 行修改为 regex = r'^[\w.@+-\\]+$' 来获得所需的效果,但是,我认为可以轻松地覆盖这个类,但我失败了。
我找到了一些有用的链接(以及许多其他类似的链接):
https://stackoverflow.com/a/39820162/4872140
https://stackoverflow.com/a/1214660/4872140
https://docs.djangoproject.com/en/1.10/releases/1.10/#official-support-for-unicode-usernames https://docs.djangoproject.com/en/1.10/ref/contrib/auth/#django.contrib.auth.models.User.username_validator
但信息已过时,或者没有完全/完全显示如何解决我的问题(在最后两个的情况下)。我很喜欢这个应用程序,所以更改 AUTH_USER_MODEL 没有吸引力。 设置.py:
AUTH_USER_MODEL = 'myapp.MyUser'
我还是尝试了,认为我可以在 User 模型上使用代理,如下所示,这会导致错误“无法代理交换的模型 'myapp.DomainUser'”:
class DomainASCIIUsernameValidator(ASCIIUsernameValidator):
regex = r'^[\w.@+-\\]+$'
class DomainUser(User):
username_validator = DomainASCIIUsernameValidator()
class Meta:
proxy = True
有没有办法以用户模型保持原样的方式替换 ASCIIUsernameValidator(和 UnicodeUsernameValidator)中的正则表达式。如果您按照https://docs.djangoproject.com/en/1.10/ref/contrib/auth/#django.contrib.auth.models.User.username_validator 中的描述对用户模型进行子类化,您是否坚持在 AUTH_USER_MODEL 中指定它?
我已经阅读了https://groups.google.com/forum/#!topic/django-developers/MBSWXcQBP3k/discussion 的讨论,觉得从一开始就创建一个自定义用户可能是默认情况下的一种方式。
【问题讨论】:
标签: django