无法使用django-registration扩展一个简单的表单(/ accounts / register /中的NotImplementedError)

时间:2014-02-13 19:08:08

标签: python django django-forms django-registration

我正在尝试在我的项目中使用django-registration,我必须在注册表单中添加两个额外的字段。我的django版本是1.6.2和python 2.7。

我的urls.py

from django.conf.urls import patterns, include, url

from registration.views import RegistrationView
from common.forms import UserRegistrationForm
import common.regbackend

urlpatterns = patterns('',
    # accounts
    url(r'^accounts/register/$', RegistrationView.as_view(form_class=UserRegistrationForm),
        {'backend': 'user_profile.backends.RegistrationBackend'},
        name='registration_register'),
    url(r'^accounts/', include('registration.backends.default.urls')),

    # home
    url(r'^$', 'home.views.home', name='home'),
)

我的common/models.py

from django.db import models


class Profile(models.Model):
    key = models.CharField(max_length=100)
    code = models.CharField(max_length=100)

    def __unicode__(self):
        return '%s' % self.key

    class Meta:
        ordering = ['key']
        verbose_name = "Profile"
        verbose_name_plural = "Profiles"

我的common/forms.py

from django import forms
from registration.forms import RegistrationForm


class UserRegistrationForm(RegistrationForm):
    key = forms.CharField(label='Key')
    code = forms.CharField(label='VCode')

最后,common/regbackend.py

from forms import *
from models import Profile
from common.forms import UserRegistrationForm


def user_created(sender, user, request, **kwargs):
    print 'ok'  # breakpoint here!
    return
    '''
    form = UserRegistrationForm(request.POST)
    data = Profile(user=user)
    data.key = form.data["key"]
    data.code = form.data["code"]
    data.save()
    '''

from registration.signals import user_registered
user_registered.connect(user_created)

当我填写表格并尝试发送时,我得到了

NotImplementedError at /accounts/register/

我的应用程序永远不会停在common/regbackend.py文件的断点处。

追溯到此为止:

/Users/null/.virtualenvs/tools/lib/python2.7/site-packages/registration/views.py in register 在这个功能:

def register(self, request, **cleaned_data):
    """
    Implement user-registration logic here. Access to both the
    request and the full cleaned_data of the registration form is
    available here.

    """
    raise NotImplementedError

我试图搜索解决方案(尤其是thisthisthis),但大多数都使用django-registration 0.8而我正在使用v1.0,这是完全改写,有些东西不像以前那样工作。我试图将其调整为v1.0,但仍然出现此错误 我该怎么做才能摆脱这个错误?提前谢谢!

1 个答案:

答案 0 :(得分:1)

  

当我填写表单并尝试发送时,我得到NotImplementedError at /accounts/register/

您的urls.py表明您使用的是自定义注册后端(user_profile.backends.RegistrationBackend)。您需要为用户注册添加自定义逻辑(如register方法建议的文档字符串所示)到其RegistrationView

根据应用程序的工作方式,让后端从两个包含的注册后端之一继承可能更有意义。

  

我的应用程序永远不会在断点处停止

print语句与breakpoint不同:如果语句已执行,则会打印" ok"到控制台或日志,但应用程序不会停止或暂停。

  

我试图搜索解决方案(特别是这个,这个和这个),但是他们中的大多数都在使用django-registration 0.8而且我使用的是v1.0,这是完全重写的,有些东西不能正常工作以前。

从django-registration迁移可能更有意义。 Its maintainer发布了long essay explaining that django-registration 1.0 has issues, but that he no longer uses it and is not maintaining it