gpt4 book ai didi

django - 如何自定义用户验证器以接受空格

转载 作者:行者123 更新时间:2023-12-04 08:25:48 26 4
gpt4 key购买 nike

我想对用户进行自定义验证,以创建名称中包含空格的名称用户。我像下面这样做,但是,我创建了 User2 并更改了正则表达式,但它没有更改验证条件,这是行不通的。有没有人知道为什么或如何而不是我可以做到这一点?
楷模

from django.utils.translation import gettext_lazy as _

from django.contrib.auth.models import User
from django.contrib.auth.validators import UnicodeUsernameValidator


class MyUnicodeUsernameValidator(UnicodeUsernameValidator):
print('test My')
regex = r'^[\d]'
message = _(
'Enter a valid username. This value may contain only letters, '
'numbers, and @/./+/-/_ characters.'
)
flags = 0


class User2(User):
username_validator = MyUnicodeUsernameValidator()
print(username_validator)
看法
from django.shortcuts import render, get_object_or_404
from .models import User2
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import logout
from blog.models import Article




class MyUserCreationForm(UserCreationForm):
class Meta:
model = User2
fields = ("username",)

def sign_up(request):
context = {}

form = MyUserCreationForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
form.save()
return render(request, 'accounts/index.html')
context['form'] = form
return render(request,'registration/sign_up.html', context)

最佳答案

由于多种原因,这种方法将不起作用。第一个是您在这里创建了一个子类,它将作为子模型实现:一个没有字段的额外模型。但即使 User是一个抽象模型,它不起作用。 User型号有 username field [GitHub]使用验证器:

class AbstractUser(AbstractBaseUser, PermissionsMixin):
# …
username_validator = UnicodeUsernameValidator()

username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)

但这不是对 username_validator 的“间接引用”。在类级别:引用 UnicodeUsernameValidator对象,因此即使您更改验证器,也不会更改已构造的字段。
我认为实现这一点的最佳方法是 Specifying a custom user model [Django-doc] .制作一个您将用作用户模型的用户模型。因此,您定义了一个类:
from django.contrib.auth.base_user import AbstractBaseUser

class MyUser(AbstractBaseUser):
username_validator = MyUnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text='Some helptext that describes what are valid usernames',
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
# …
然而,它需要额外的工作(文档中指定的步骤)来定义其他字段、管理器等。
虽然您可以这样做,但在用户名中允许空格可能不是一个好主意。用户名有时用在 URI 中,因为空格被百分比编码为 %20 ,这将导致“丑陋”的 URI。

关于django - 如何自定义用户验证器以接受空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65270498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com