使用Django 1.10我想在用户名中允许\字符,因为我在使用'django.contrib.auth.middleware.RemoteUserMiddleware'的Windows环境中工作,并且远程用户作为域\用户名(我不想删除域在某些业务逻辑中使用)。Django覆盖ASCIIUsernameValidator
我可以通过修改行regex = r'^[\[email protected]+-]+$'
改变Django的\的contrib \权威性\ validators.py容易够了,都希望的影响是regex = r'^[\[email protected]+-\\]+$'
不过,我认为一个可以很容易地覆盖这个类,但我失败了。
我发现一些有用的链接(和许多其他类似这里SO):
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并不吸引人。 settings.py:
AUTH_USER_MODEL = 'myapp.MyUser'
无论如何我尝试了,想我或许可以对用户模型等,其导致错误以下使用代理服务器“不能代理的交换模式‘myapp.DomainUser’”:
class DomainASCIIUsernameValidator(ASCIIUsernameValidator):
regex = r'^[\[email protected]+-\\]+$'
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的讨论,感觉从一开始就创建自定义用户可能会成为默认情况。
哇!我刚刚开始一个新项目,我会在第二天左右通过这个项目给大家一个镜头。 – AMG
如果您要开始一个新项目,我会建议创建一个新的用户模型。他们甚至推荐它[链接](https://docs.djangoproject.com/zh/dev/topics/auth/customizing/#substotation-a-custom-user-model): _如果你正在开始一个新项目,强烈建议设置一个自定义用户模型,即使默认的用户模型对您来说已经足够。此模型的行为与默认用户模型的行为相同,但如果需要,您可以在将来自定义它:_。 –