小编AMG*_*AMG的帖子

Django覆盖ASCIIUsernameValidator

使用Django 1.10我想在用户名中使用\字符,因为我在使用'django.contrib.auth.middleware.RemoteUserMiddleware'的Windows环境中工作,远程用户以域\用户名(我有)不希望删除域,因为它在某些业务逻辑中使用).

我可以很容易地改变django\contrib\auth\validators.py并通过修改该行regex = r'^[\w.@+-]+$'来获得所需的影响,regex = r'^[\w.@+-\\]+$'但我认为可以轻松覆盖这个类但我失败了.

我发现了一些有用的链接(以及其他很多类似的链接):

/sf/answers/2787411371/

/sf/answers/85026231/

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'
Run Code Online (Sandbox Code Playgroud)

无论如何我试过了,以为我可以在User模型上使用代理,如下所示导致错误"无法代理交换模型'myapp.DomainUser'":

class DomainASCIIUsernameValidator(ASCIIUsernameValidator):
    regex = r'^[\w.@+-\\]+$'

class DomainUser(User):
    username_validator = DomainASCIIUsernameValidator()

    class Meta:
        proxy = True
Run Code Online (Sandbox Code Playgroud)

有没有办法以用户模型保持原样的方式替换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

4
推荐指数
1
解决办法
601
查看次数

标签 统计

django ×1