- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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'
class DomainASCIIUsernameValidator(ASCIIUsernameValidator):
regex = r'^[\w.@+-\\]+$'
class DomainUser(User):
username_validator = DomainASCIIUsernameValidator()
class Meta:
proxy = True
最佳答案
我花了一整天的时间和许多不同的答案让这个工作。我将代码分成不同的部分。首先,我们有我们的验证器:
验证器.py
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.utils.translation import ugettext_lazy as _
class DomainUnicodeUsernameValidator(UnicodeUsernameValidator):
"""Allows \."""
regex = r'^[\w.@+-\\]+$'
message = _(
'Enter a valid username. This value may contain only letters, '
'numbers, and \/@/./+/-/_ characters.'
)
from django.contrib.auth.models import User
from .validators import DomainUnicodeUsernameValidator
class DomainUser(User):
class Meta:
proxy = True
def __init__(self, *args, **kwargs):
self._meta.get_field(
'username'
).validators[0] = DomainUnicodeUsernameValidator()
super().__init__(*args, **kwargs)
from django.contrib.auth.forms import UserChangeForm
from django.utils.translation import ugettext_lazy as _
from .models import DomainUser
class DomainUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = DomainUser
help_texts = {
'username': _('Required. 150 characters or fewer. Letters, digits and \/@/./+/-/_ only.'), # NOQA
}
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from .forms import DomainUserChangeForm
class DomainUserAdmin(UserAdmin):
form = DomainUserChangeForm
admin.site.unregister(User)
admin.site.register(User, DomainUserAdmin)
关于Django 覆盖 ASCIIUsernameValidator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982521/
使用 Django 1.10 我想在用户名中允许\字符,因为我在使用“django.contrib.auth.middleware.RemoteUserMiddleware”的 Windows 环境中
我是一名优秀的程序员,十分优秀!