2

所以我有 django 注册,并且我想扩展表单的验证以禁止在电子邮件已在使用的情况下进行注册 - 这样做的方法是什么?

我有这个(嗯,我真的没有。我的笔记本电脑被我的 gf 征用在 hulu 上观看 The Voice,所以这个来自记忆和我的 ipad):

import django-registration.registrationForm

class customRegistrationForm(form.RegistrationForm):
    def clean_email(self):
        #check here like the one for username!

我可以这样做吗?另外,我应该把这个自定义表格贴在哪里?我假设我没有把它放在 django-registration 文件夹中,所以在我的应用程序文件夹中......我是“打算”把它放在一个特定的文件夹中吗?如果我只是将它粘贴在基本 app_name 文件夹中并调用 customRegistrationForm,这有关系吗?

干杯! 安德鲁

更新

好的,所以我已经解决了要在 django 中“覆盖”内容,我需要将类放在init .py 中,并且如果我想拾取一个子文件夹,它需要它自己的init .py 文件

“文件夹” init .py 文件可以为空

不知道为什么会这样,大概是 python 的东西?另外,不确定我是否可以在文件夹中的单独文件中包含 customRegisterForm.py,或者它是否需要init .py中

无论如何,接下来是覆盖似乎并不像我想象的那样起作用。

在 Java 中,当我扩展一个类时,可以访问所有类的非私有成员,并且它们的行为与父类中定义的完全一样。在 django 中,我得到了很多

“customRegistrationForm”对象没有属性“get_form_class”

或我没有明确创建的方法的名称......我在覆盖中遗漏了什么吗?

更新更新

我复制了第二个例子

http://pbjots.blogspot.com/2012/01/customising-django-registration-no.html

这是一种享受。仍然不确定为什么扩展不能保留所有这些方法,或者我是否只是通过盲目复制代码而破坏了某些东西——有什么想法吗?

4

2 回答 2

1

查看RegistrationFormUniqueEmail表单。它是 django-registration 的内置类,可以完成工作

from registration.forms import RegistrationFormUniqueEmail
于 2012-07-23T14:30:10.183 回答
1

要扩展注册表以包含电子邮件,您首先需要扩展UserCreationForm以包含电子邮件字段。您可以创建一个名为 forms.py 的文件来包含该特定应用程序所需的所有表单,但根据我的经验,您不必经常使用init.py

以下是如何扩展注册表单以包含电子邮件的示例:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

class RegisterForm(UserCreationForm):
    email = forms.EmailField(label="E-Mail")    

    class Meta:
        model = User
        fields = ("username", "email", )

    def clean_email(self):
        email = self.cleaned_data["email"]

        try:
        User.objects.get(email=email)
        except User.DoesNotExist:
        return email

        raise forms.ValidationError("A user with that email address already exists.")

看看这个 Django 教程,它很好地概述了这个过程。 https://docs.djangoproject.com/en/1.4/intro/tutorial01/

于 2012-05-09T02:35:04.193 回答