我想对django-user-accounts
实施的帐户注册流程设置年龄限制。我已经在SignupForm中添加了一个字段,就像docs中的示例一样。在我的自定义视图中,我有以下内容:
import user_accounts_custom.forms
from profiles.models import ArtistProfile, UserProfile
from datetime import date
import math
class SignupView(SignupView):
form_class = user_accounts_custom.forms.SignupForm
def create_user(self, form, commit=True, **kwargs):
old_enough = self.birthday_check(form)
if old_enough:
return super(SignupView, self).create_user(self, form,
commit=True, **kwargs)
else:
return super(SignupView, self).create_user(self, form,
commit=False, **kwargs)
def birthday_check(self, form):
birthdate = form.cleaned_data["birthdate"]
fraud_detect = abs(date.today() - birthdate)
if ( (fraud_detect.days / 365.0) < 13 ):
# WHAT ABOUT THE BABIES!!!!
return False
else:
return True
将commit设置为False会在SignupView实例的create_user方法中进一步给出类型错误,因为它尝试返回用户对象,但是,就像我想要的那样,它没有创建一个。我想发送一个HttpResponseForbidden对象或消息,但我不知道如何在给定上下文的情况下实现它。我正在考虑的另一个选项是使用虚拟用户对象(特别是我的匿名用户对象),只是重定向而不创建帐户;我不确定哪条路最简单。
答案 0 :(得分:0)
这answer帮助我解决了问题,以下是我实施的方法:
def clean(self):
cleaned_data = super(SignupForm, self).clean()
bday = self.cleaned_data["birthdate"]
fraud_detect = abs(date.today() - bday)
if ( (fraud_detect.days / 365.0) < 13 ):
# WHAT ABOUT THE BABIES!!!!
raise forms.ValidationError("Sorry, you cannot create an account.",
code="too_young",
)
return cleaned_data
诀窍是截取我创建的clean()
中的forms.py
方法,以自定义django-user-accounts
。
一些其他有助于验证的链接(注意:这些链接转到django
版本1.6):