使用django-user-accounts设置年龄限制

时间:2014-04-28 22:22:58

标签: django authentication

我想对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对象或消息,但我不知道如何在给定上下文的情况下实现它。我正在考虑的另一个选项是使用虚拟用户对象(特别是我的匿名用户对象),只是重定向而不创建帐户;我不确定哪条路最简单。

1 个答案:

答案 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):