我有一个使用django-registration处理新用户注册的 Django 应用程序。我想在注册表中添加出生日期,以便在决定是否允许他们注册之前检查用户的年龄。但是我不需要甚至不想将他们的出生日期存储为个人资料信息。作为注册过程的一部分,我如何将其添加到注册表中并验证他们的年龄?
3690 次
2 回答
9
rz 的答案有一个小缺陷,因为它没有考虑闰年。
如果某人出生于 1994 年 1 月 1 日,则 rz 的答案中提到的出生日期检查会将他们计算为 2011 年 12 月 28 日的 18 岁。
这是考虑闰年的替代版本:
from datetime import date
from registration.forms import RegistrationForm
class DOBRegistrationForm(RegistrationForm):
date_of_birth = forms.DateField()
def clean_date_of_birth(self):
dob = self.cleaned_data['date_of_birth']
today = date.today()
if (dob.year + 18, dob.month, bod.day) > (today.year, today.month, today.day):
raise forms.ValidationError('Must be at least 18 years old to register')
return dob
于 2011-09-04T00:49:56.707 回答
7
扩展内置注册表以添加 DOB 字段和 clean_ 方法以验证它是否在某个时间之前。就像是:
from datetime import datetime
from registration.forms import RegistrationForm
class DOBRegistrationForm(RegistrationForm):
date_of_birth = forms.DateField()
def clean_date_of_birth(self):
dob = self.cleaned_data['date_of_birth']
age = (datetime.now() - dob).days/365
if age < 18:
raise forms.ValidationError('Must be at least 18 years old to register')
return dob
在您看来,您可以DOBRegistrationForm像使用普通RegistrationForm. 如果您使用的registration.views.register只是将类作为form_class参数传递。
这样,如果他们的 DOB 不在允许的范围内,而不在数据库中创建任何行,他们将收到表单错误。
于 2010-12-13T20:57:35.593 回答