1

我是 Python 和 Django 的新手,正在尝试开发一个 3 步激活/注册系统。

第 1 步:使用电子邮件地址、名字和姓氏注册以进行验证。

第 2 步:验证后,使用要通过电子邮件发送的激活密钥和电子邮件地址作为记录用户名创建新的用户记录。

第三步:激活账户。


我创建了一个处理第 1 步的应用程序,并且我已经能够结合 django-registration 和 django 自定义用户模型来处理第 2 步和第 3 步。

这一切都可以通过内置的管理工具在步骤 1 和 2 之间手动链接。但是,我希望有一个管理员操作,可以从步骤 1 中选择所有经过验证的用户,并使用记录自动处理步骤 2,而不必为每个用户使用表单。

我相信我应该能够调用 RegistrationManager create_inactive_user 方法来做到这一点。我的问题是,由于 Python/Django 知识有限,我很难调用此方法。

实际上,我认为我称它为 OK,但在第 1 步应用程序模型中遇到了错误。此模型使用 BaseManager 中的 normalize_email 实用程序,并且在该应用程序中直接使用时可以工作,但是当我使用 create_inactive_user 时出现错误:TypeError at /admin/simple_reg/emailreg/ 'NoneType' object is not callable

我假设有些东西我不包括在内。以下是我的 admin.py 文件中的相关详细信息:

from django.contrib import admin
from django.contrib.auth import get_user_model

from simple_reg.models import EmailReg       # Initial step 1 registration model
from userinfo.models import UserManager      # Step 2 and 3 custom user model
from registration.models import RegistrationManager


class EmailRegAdmin(admin.ModelAdmin):
...
    def create_user_record(self, request, queryset):
        # Generate new User records from validated email contacts
        count = 0
        validated = len(queryset)
        for contact in queryset:
            pword = 'randomletters'
            try:
                existing = get_user_model().objects.filter(email__exact=contact.email)
                if existing.exists():
                    print "A user with the email address of %s already exists." % (contact.email)
                else:
                    RegistrationManager().create_inactive_user(contact.first_name,
                                           contact.last_name, contact.email, pword, site)
                        count = count + 1
                except:
                    print "User %s was not created" % (contact.email)

        self.message_user(request, "Of %s validations, %s user accounts have been created." % (validated, count))

create_user_record.short_description = "Generate new User records on selected contacts"

我相信这很简单,所以希望有人能够指出我正确的方向。

4

2 回答 2

1

终于自己找到了答案。

我应该一直调用RegistrationProfile,而不是RegistrationManager。

我知道这很简单!

于 2013-07-10T09:15:37.713 回答
0

可能是最简单的方法是创建您自己的用户模型并定义一个类似于 is_active() 布尔类型的字段。

于 2013-07-09T23:24:59.350 回答