我能在django-registration中强制要求用户创建唯一的电子邮件地址吗?
对于使用基于类的视图的django_registration的较新版本,您可以执行以下操作:
from registration.forms import RegistrationFormUniqueEmail
from registration.backends.default.views import RegistrationView
urlpatterns = patterns('',
url(r'^register/$',
RegistrationView.as_view(form_class=RegistrationFormUniqueEmail),
name='registration_register'),
)
from registration.forms import RegistrationFormUniqueEmail
url(r'^accounts/register/$', 'registration.views.register',
{'form_class': RegistrationFormUniqueEmail,
'backend': 'registration.backends.default.DefaultBackend'},
name='registration_register'),
class RegistrationFormUniqueEmail(RegistrationForm):
之后设置了断点以确保它运行,并且它确实运行了,因为控制台返回了:RuntimeWarning)
/Users/merty/.virtualenvs/ssc/lib/python2.7/site-packages/registration/forms.py(92)RegistrationFormUniqueEmail() 91 ---> 92 def clean_email(self): 93 """ipdb>
然后我在验证条件的各个部分放置了断点,但它似乎没有捕获到那部分是否正在运行?! - KindOfGuydjango-registration源代码中包含了多个表单,其中一个是RegistrationFormUniqueEmail
,可能会对您有所帮助...
附注:您可以通过更改默认后端或实现自定义后端来调整要使用的表单,在自定义后端中返回相应的表单类,请参见:http://bitbucket.org/ubernostrum/django-registration/src/073835a4269f/registration/backends/default/init.py#cl-118
正如miku所指出的那样,您应该简单地使用RegistrationFormUniqueEmail。
如果按照文档和错误报告回复(截至2011年中期)的实现方式,您可能会遇到异常,例如:
TypeError at /accounts/register/
register() takes at least 2 non-keyword arguments (1 given)
为了正确指定此后端,您的urlconf应该如下所示:
(r'^accounts/register/', 'registration.views.register' {'form_class':RegistrationFormUniqueEmail, 'backend':'registration.backends.default.DefaultBackend' }),
(r'^accounts/', include('registration.backends.default.urls')),
[ 请原谅我额外的回答,因为这应该作为对miku正确答案的评论; 我没有评论的特权,但这个提示可能会节省至少几个人每15分钟,所以希望值得这个被迫的不礼貌 ]
forms.py
from registration.forms import RegistrationFormUniqueEmail
class RegistroPerfilForm(RegistrationFormUniqueEmail):
first_name= forms.CharField(required=True)
last_name= forms.CharField(required=True)
kind__of_user= forms.CharField(widget=forms.RadioSelect(choices=TIPO))
对于django-registration-redux 1.4中的唯一电子邮件地址。
在url.py中添加以下内容
from registration.forms import RegistrationFormUniqueEmail
from registration.backends.default.views import RegistrationView urlpatterns = [ url(r'^accounts/register/$',RegistrationView.as_view(form_class=RegistrationFormUniqueEmail), name='registration_register'),
url(r'^accounts/', include('registration.backends.default.urls'))
]
从django-registration 3.1.2开始,我能够以一种几乎与https://dev59.com/eXI95IYBdhLWcg3w1Bro#19383392相同的方式解决这个问题:
from django_registration.forms import RegistrationFormUniqueEmail
from django_registration.backends.activation.views import RegistrationView
urlpatterns = [
...
path('accounts/register/',
RegistrationView.as_view(
form_class=RegistrationFormUniqueEmail
),
name='django_registration_register',
),
path('accounts/', include('django_registration.backends.activation.urls')),
...
]
User.objects.filter(username=username).exists()
返回True,则return HttpResponseRedirect(reverse('accounts:unique'))
语句会将用户重定向到一个提示该电子邮件不是唯一的消息。注意,这里的'accounts:unique'是特定的URL名称,需要根据实际情况进行替换。 - Josh