하나의 양식과 하나의보기를 사용할 수 있습니다. 이메일이 존재하는 경우가 존재하는 경우 이 양식 검사,보기
if form.is_valid():
#signup
elif form['email'].errors and form['email'].errors[0] == _("A user with this e-mail already exists."):
#login
user = auth.authenticate(username=form['email'].value(), password=form['password'].value())
auth.login(request, user)
의 기능을 기반으로보기에이 솔루션 작업을 다음
class LoginOrSignupForm(forms.ModelForm):
email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput(render_value=False))
def clean_email(self):
existing = User.objects.filter(email__iexact=self.cleaned_data['email'], username__iexact=self.cleaned_data['email'])
if existing.exists():
raise forms.ValidationError(_("A user with this e-mail already exists."))
return self.cleaned_data['email']
그리고 ValidationsError
을 올립니다. 그래서 경우에 당신은 우리가 당신의 CBV에 form_invalid 방법을 대체 할 수 있습니다, CBV를 사용하려면 :
우리가 명심를 오버라이드 (override) 할 필요가 없습니다 form_valid를 들어
def form_invalid(self, form):
if form['email'].errors and form['email'].errors[0] == _("A user with this e-mail already exists."):
user = auth.authenticate(username=form['email'].value(), password=form['password'].value())
auth.login(request, user)
return HttpRedirect('your page')
return super(YouViewName, self).form_invalid(form)
양식이 유효한 경우 그, 새로운 사용자를 등록해야합니다. 이 경우 django.views.generic.CreateView
이 도움이 될 수 있습니다.
보기에서 비즈니스 로직을 메소드로 추출하고 결합 된보기에서 해당 메소드를 호출하십시오. –