Python 如何将最大长度添加到allauth用户名
我正在使用Django allauth作为Django站点的用户帐户框架。文档显示存在一个帐户,但由于某些原因,没有Python 如何将最大长度添加到allauth用户名,python,django,django-allauth,Python,Django,Django Allauth,我正在使用Django allauth作为Django站点的用户帐户框架。文档显示存在一个帐户,但由于某些原因,没有帐户\用户名\最大长度 有没有办法创建用户名的最大长度 这是我的自定义allauth注册表-也许我可以在这里做些什么 class AllauthSignupForm(forms.Form): captcha = ReCaptchaField( public_key=config("RECAPTCHA_PUBLIC_KEY"), privat
帐户\用户名\最大长度
有没有办法创建用户名的最大长度
这是我的自定义allauth注册表-也许我可以在这里做些什么
class AllauthSignupForm(forms.Form):
captcha = ReCaptchaField(
public_key=config("RECAPTCHA_PUBLIC_KEY"),
private_key=config("RECAPTCHA_PRIVATE_KEY"),
)
class Meta:
model = User
def signup(self, request, user):
""" Required, or else it throws deprecation warnings """
pass
编辑:尝试将SignupView子类化
draft1/forms.py
class AllauthSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
super(AllauthSignupForm, self).__init__(*args, **kwargs)
self.fields['username']['validators'] += MaxLengthValidator(150,
"Username should be less than 150 character long")
captcha = ReCaptchaField(
public_key=config("RECAPTCHA_PUBLIC_KEY"),
private_key=config("RECAPTCHA_PRIVATE_KEY"),
)
class Meta:
model = User
def signup(self, request, user):
""" Required, or else it throws deprecation warnings """
pass
from allauth.account.views import SignupView
class MySignupView(SignupView):
form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
draft1/views.py
class AllauthSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
super(AllauthSignupForm, self).__init__(*args, **kwargs)
self.fields['username']['validators'] += MaxLengthValidator(150,
"Username should be less than 150 character long")
captcha = ReCaptchaField(
public_key=config("RECAPTCHA_PUBLIC_KEY"),
private_key=config("RECAPTCHA_PRIVATE_KEY"),
)
class Meta:
model = User
def signup(self, request, user):
""" Required, or else it throws deprecation warnings """
pass
from allauth.account.views import SignupView
class MySignupView(SignupView):
form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
allauth/account/url.py
class AllauthSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
super(AllauthSignupForm, self).__init__(*args, **kwargs)
self.fields['username']['validators'] += MaxLengthValidator(150,
"Username should be less than 150 character long")
captcha = ReCaptchaField(
public_key=config("RECAPTCHA_PUBLIC_KEY"),
private_key=config("RECAPTCHA_PRIVATE_KEY"),
)
class Meta:
model = User
def signup(self, request, user):
""" Required, or else it throws deprecation warnings """
pass
from allauth.account.views import SignupView
class MySignupView(SignupView):
form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
draft1/settings.py
class AllauthSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
super(AllauthSignupForm, self).__init__(*args, **kwargs)
self.fields['username']['validators'] += MaxLengthValidator(150,
"Username should be less than 150 character long")
captcha = ReCaptchaField(
public_key=config("RECAPTCHA_PUBLIC_KEY"),
private_key=config("RECAPTCHA_PRIVATE_KEY"),
)
class Meta:
model = User
def signup(self, request, user):
""" Required, or else it throws deprecation warnings """
pass
from allauth.account.views import SignupView
class MySignupView(SignupView):
form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
上述代码返回此错误:
Traceback (most recent call last):
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper
fn(*args, **kwargs)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
self.check(display_num_errors=True)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/management/base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/management/base.py", line 346, in _run_checks
return checks.run_checks(**kwargs)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/checks/registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/checks/urls.py", line 16, in check_url_config
return check_resolver(resolver)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/checks/urls.py", line 26, in check_resolver
return check_method()
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/urls/resolvers.py", line 254, in check
for pattern in self.url_patterns:
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/urls/resolvers.py", line 405, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/urls/resolvers.py", line 398, in urlconf_module
return import_module(self.urlconf_name)
File "/Users/zorgan/Desktop/postr1/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 665, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/Users/zorgan/Desktop/vorsso/venvor/draft1/urls.py", line 6, in <module>
from . import views
File "/Users/zorgan/Desktop/vorsso/venvor/draft1/views.py", line 11, in <module>
from .forms import UserSettingsForm
File "/Users/zorgan/Desktop/vorsso/venvor/draft1/forms.py", line 8, in <module>
from allauth.account.forms import SignupForm
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/allauth/account/forms.py", line 228, in <module>
class BaseSignupForm(_base_signup_form_class()):
File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/allauth/account/forms.py", line 216, in _base_signup_form_class
fc_classname))
django.core.exceptions.ImproperlyConfigured: Module "draft1.forms" does not define a "AllauthSignupForm" class
回溯(最近一次呼叫最后一次):
包装器中的文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/utils/autoreload.py”,第228行
fn(*args,**kwargs)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/management/commands/runserver.py”,第125行,在内部运行
self.check(display\u num\u errors=True)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/management/base.py”,第359行,选中
包括部署检查=包括部署检查,
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/management/base.py”,第346行,在运行检查中
返回检查。运行检查(**kwargs)
运行检查中的文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/checks/registry.py”,第81行
新建错误=检查(应用程序配置=应用程序配置)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/checks/url.py”,第16行,在check\u url\u config中
返回检查\u分解器(分解器)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/checks/url.py”,第26行,在check_解析器中
返回检查方法()
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/url/resolvers.py”,第254行,选中
对于self.url_模式中的模式:
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/utils/functional.py”,第35行,在__
res=instance.\uuuu dict\uuuu[self.name]=self.func(实例)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/url/resolvers.py”,第405行,url_模式
patterns=getattr(self.urlconf_模块,“urlpatterns”,self.urlconf_模块)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/utils/functional.py”,第35行,在__
res=instance.\uuuu dict\uuuu[self.name]=self.func(实例)
urlconf_模块中的文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/url/resolvers.py”,第398行
返回导入_模块(self.urlconf_名称)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/importlib/_init__.py”,第126行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第986行,在_gcd_import中
文件“”,第969行,在“查找”和“加载”中
文件“”,第958行,在“查找”和“加载”中解锁
文件“”,第673行,在“加载”中
exec_模块中第665行的文件“”
文件“”,第222行,在已删除帧的调用中
文件“/Users/zorgan/Desktop/vorso/venvor/draft1/url.py”,第6行,在
从…起导入视图
文件“/Users/zorgan/Desktop/vorso/venvor/draft1/views.py”,第11行,在
from.forms导入用户设置表单
文件“/Users/zorgan/Desktop/vorso/venvor/draft1/forms.py”,第8行,在
从allauth.account.forms导入注册表单
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/allauth/account/forms.py”,第228行,在
类BaseSignupForm(\u base\u signup\u form\u class()):
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/allauth/account/forms.py”,第216行,基本注册表单类
fc_类名称)
django.core.exceptions.ImpropertlyConfigured:模块“draft1.forms”未定义“AllauthSignupForm”类
您应该使用如下所示的最大长度验证器。关于验证器的更多文档
不确定这是否是最好的方法,但它是有效的 扩展
注册表单
后,将用户名
字段完全更改为具有max_length
参数的新字段
from django import forms
from django.utils.translation import ugettext_lazy as _
from allauth.account.forms import SignupForm
class AllauthSignupForm(SignupForm):
username = forms.CharField(label=_("Username"),
min_length=5,
max_length=20, # Change this
widget=forms.TextInput(
attrs={'placeholder':
_('Username'),
'autofocus': 'autofocus'}))
我想解释一下为什么没有
帐户\用户名\最大长度
。如果打开源代码,您将看到max_length
验证器来自username
model字段
其中,get\u username\u max\u length
是实际从User
模型中提取max\u length
值的函数
第一种方法:这样您就可以直接在您的用户
的model用户名
字段上更改max_length
值(如果您将其交换)
我不认为重写表单字段或\uuuuu init\uuuuu
方法实际上会像其他答案所建议的那样起作用,因为max\u length
的赋值发生在ACCOUNT\u SIGNUP\u form\u CLASS
的子类中
其中,\u base\u signup\u form\u class
是获取您的帐户\u signup\u form\u class
第二种方法:是将SignupView
子类化,并覆盖它的SignupForm
读和写
在这个注册表单中
你可以按照@MehdiB或@PeterSobhi的建议去做
配置不当
问题是由于
因此,请确保这些表单在不同的python模块中按照
尝试使用全名导入,如表单中的: 从allauth.accounts将表单导入为AllauthForms 类AllauthSignupForm(AllauthForms.SignupForm):
我没有对此进行测试,很抱歉我用手机发布了此消息。我将很快重新格式化答案这可以通过扩展
DefaultAccountAdapter
类并覆盖clean_username
方法快速完成。您还需要在自定义验证后再次引用clean_用户名
,以完成其他内置验证
这是可以做到的