我正在使用django默认注册模块来注册用户。 该模块正在做什么,它使用不同的用户名注册用户但是同样的电子邮件。 如果它正在这样做,我怎么能发送忘记密码电子邮件?
我在views.py中写了这个,所以同样的电子邮件没有注册,但这也无效。用户仍然使用相同的电子邮件注册。
def register_user(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
try:
user_present = User.objects.get(username=form.username)
except:
user_present = None
if user_present:
messages.error(request, 'Username already taken')
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
return render_to_response('register.html',args)
else:
try:
user_present = User.objects.get(email=form.email)
except:
user_present = None
if user_present:
messages.error(request, 'Your email is already registered.')
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
return render_to_response('register.html',args)
else:
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
messages.error(request, 'There were errors in the form. Please fill again.')
return render_to_response('register.html',args)
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
return render_to_response('register.html',args)
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
有没有办法像这样添加unique = True? :
email = forms.EmailField(required=True,unique=True)
答案 0 :(得分:0)
据我了解,您使用的username
和email
值不正确。您应该从以下表单中获取它们:form.cleaned_data['username']
和form.cleaned_data['email']
。我还建议将此验证放入Form本身。阅读clean_fieldname
方法here。还有一件事:您不需要对username
进行任何唯一性测试,因为它默认定义为unique=True
,因此只需测试电子邮件:
class MyRegistrationForm(UserCreationForm):
# your code here
def clean_email(self):
email = self.cleaned_data.get('email')
if email:
if User.objects.filter(email=email).exists():
raise forms.ValidationError('Your email is not unique.')
return email
如果没有这些独特性测试,你现在看起来会更简单。