Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django在注册时根据允许用户名的正则表达式检查用户名_Python_Regex_Django_Validation_User Registration - Fatal编程技术网

Python Django在注册时根据允许用户名的正则表达式检查用户名

Python Django在注册时根据允许用户名的正则表达式检查用户名,python,regex,django,validation,user-registration,Python,Regex,Django,Validation,User Registration,我想在注册时对照正则表达式(目前不是正则表达式,请参见下面的代码)检查用户名。 我不希望新用户使用诸如“管理员、支持者、工作人员”等用户名。 我只是试着为自己编写一个验证程序,但遗憾的是,我以前没有使用regex或类似的验证,因为我对编码非常陌生,可能是smb。你可以帮我解决这个问题: models.py class User(AbstractBaseUser): ... user = models.CharField(verbose_name='Username', max_len

我想在注册时对照正则表达式(目前不是正则表达式,请参见下面的代码)检查用户名。 我不希望新用户使用诸如“管理员、支持者、工作人员”等用户名。 我只是试着为自己编写一个验证程序,但遗憾的是,我以前没有使用regex或类似的验证,因为我对编码非常陌生,可能是smb。你可以帮我解决这个问题:

models.py

class User(AbstractBaseUser):
   ...
   user = models.CharField(verbose_name='Username', max_length=20, unique=True, validators=username_filter)
   ...
验证器.py

从django.core.exceptions导入ValidationError 从django.core.validators导入RegexValidator

def username_filter(value):
    invalid_username_regex = RegexValidator(
                regex=("admin", "staff", "supporter", "support")
            ),
    if value in invalid_username_regex:
        raise ValidationError(u'Its not possible to signup with a username like this, please try a different one')
但目前我得到以下错误:

user=models.CharField(详细名称='Username',最大长度=15, unique=True,validators=username\u filter)文件 “/venv/lib/python3.7/site packages/django/db/models/fields/init.py”, 第1039行,在initapp|
super().init(*args,**kwargs)文件 “/venv/lib/python3.7/site packages/django/db/models/fields/init.py”, 第171行,在initapp|
self._validators=list(validators)#存储以便稍后解构 TypeError:“函数”对象不可编辑

我甚至不知道在models.py使用验证器是否真的有意义。。。也许在forms.py上实现这一点更有意义 否则,如果真正的管理员登录,登录时也会显示错误

更新:

我刚刚从models.py中删除了验证器,并移动到forms.py,如下所示:

class RegistrationForm(UserCreationForm):
    user = forms.CharField(required=True, validators=[username_filter])
但似乎没有效果


提前感谢

为什么需要使用正则表达式?听起来你只是想对照一个禁用名称列表进行检查。您好,您的validators参数必须是一个列表
user=models.CharField(verbose\u name='Username',max\u length=20,unique=True,validators=[Username\u filter])
@Daniel Roseman这只是一个例子,因为我不知道如何做。如果有一个正则表达式可以检查管理员、职员等的所有变化,这样你实际上就不能使用任何组合作为你的工作的一部分,那将是非常棒的username@DavidLinch如果你想在整个站点(管理员和公共区域)阻止它,请考虑使用Mult.CuleMeHod,这里的文档->如果不是,尽我们所能澄清您需要什么来帮助您为什么这需要是一个正则表达式?听起来你只是想对照一个禁用名称列表进行检查。您好,您的validators参数必须是一个列表
user=models.CharField(verbose\u name='Username',max\u length=20,unique=True,validators=[Username\u filter])
@Daniel Roseman这只是一个例子,因为我不知道如何做。如果有一个正则表达式可以检查管理员、职员等的所有变化,这样你实际上就不能使用任何组合作为你的工作的一部分,那将是非常棒的username@DavidLinch如果你想在整个站点(管理员和公共区域)阻止它,请考虑使用Mult.CuleMeHod,这里的文档->如果不是,尽可能说明您需要什么来帮助您