使用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): _如果你正在開始一個新項目,強烈建議設置一個自定義用戶模型,即使默認的用戶模型對您來說已經足夠。此模型的行爲與默認用戶模型的行爲相同,但如果需要,您可以在將來自定義它:_。 –