如何将年龄验证添加到Django注册表格?
-
09-10-2019 - |
题
我有一个正在使用的Django应用程序 Django注册 处理新的用户注册。我想将出生日期添加到注册表中,以便在决定是否允许他们注册之前检查用户的年龄。但是,我不需要甚至不想将其出生日期存储为个人资料信息。如何将其添加到注册表中并验证其年龄作为注册过程的一部分?
解决方案
扩展内置的注册表格,以添加DOB字段和清洁_方法,以验证它在一定时间之前。就像是:
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不在允许的范围内,他们就会遇到表单错误。
其他提示
RZ的回答存在一个小缺陷,因为它没有考虑到LEAP年。
如果某人于1994年1月1日出生,RZ答案中提到的生日支票将计算为2011年12月28日的18岁。
这是一个替代版本,考虑了LEAP年:
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
不隶属于 StackOverflow