Python django注册重复,自定义用户模型注册未实现错误
我正在努力使我的自定义用户模型与django registration redux一起工作。我设法使所有字段在注册视图中正确显示,并且我可以在django shell中创建帐户。但当我尝试在第页注册时,我得到:Python django注册重复,自定义用户模型注册未实现错误,python,django,django-registration,Python,Django,Django Registration,我正在努力使我的自定义用户模型与django registration redux一起工作。我设法使所有字段在注册视图中正确显示,并且我可以在django shell中创建帐户。但当我尝试在第页注册时,我得到: NotImplementedError at /accounts/register/ No exception message supplied Request Method: POST Request URL: http://127.0.0.1/accounts/register
NotImplementedError at /accounts/register/
No exception message supplied
Request Method: POST
Request URL: http://127.0.0.1/accounts/register/
Django Version: 1.9.2
Exception Type: NotImplementedError
Exception Location: /usr/local/lib/python3.5/site-packages/registration/views.py in register, line 118
Python Executable: /usr/local/bin/python3.5
Python Version: 3.5.1
Python Path:
['/opt/davinci/davinci-web',
'/usr/local/bin',
'/usr/local/lib/python35.zip',
'/usr/local/lib/python3.5',
'/usr/local/lib/python3.5/plat-linux',
'/usr/local/lib/python3.5/lib-dynload',
'/usr/local/lib/python3.5/site-packages']
my root.url.py
from django.conf.urls import url, include
from django.contrib import admin
from home.views import home
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', home, name="home"),
url(r'^booking/', include('booking.urls'), name="booking"),
url(r'^accounts/', include('accounts.urls'), name='accounts')
]
accounts.url
from django.conf.urls import url, include
from registration.views import RegistrationView
from .forms import UserRegistrationForm
urlpatterns = [
url(r'^register/$', RegistrationView.as_view(form_class=UserRegistrationForm),
name='registration_register',),
url(r'^', include('registration.backends.default.urls')),
]
accounts.models.py
from django.db import models
from django.utils import timezone
from django.core.mail import send_mail
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
class UserManager(BaseUserManager):
def _create_user(self, email, password, first_name, last_name,
is_staff, is_superuser, **extra_fields):
now = timezone.now()
if not email:
raise ValueError(_('Email is required'))
email = self.normalize_email(email)
first_name = first_name.capitalize()
last_name = last_name.capitalize()
user = self.model(email=email, first_name=first_name, last_name=last_name,
is_staff=is_staff, is_active=False,
is_superuser=is_superuser, last_login=now, date_joined=now,
**extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password, first_name, last_name, **extra_fields):
return self._create_user(email, password, first_name, last_name, is_staff=False,
is_superuser=False, **extra_fields)
def create_superuser(self, email, password, first_name, last_name, **extra_fields):
user = self._create_user(email, password, first_name, last_name, is_staff=True,
is_superuser=True, **extra_fields)
user.is_active = True
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email'), max_length=100, unique=True,
help_text=_('Required. 100 characters or fewer. '
'Letters, numbers and @/./+/-/_ characters'))
first_name = models.CharField(_('first name'), max_length=30, blank=False, null=True)
last_name = models.CharField(_('last name'), max_length=30, blank=False, null=True)
is_staff = models.BooleanField(_('staff status'), default=False)
is_active = models.BooleanField(_('active'), default=False)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
objects = UserManager()
class Meta:
verbose_name = _('user')
verbose_name_plural = _('user')
def get_full_name(self):
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip()
def get_short_name(self):
return self.first_name
def email_user(self, subject, message, from_email=None):
send_mail(subject, message, from_email, [self.email])
accounts.forms.py
from django import forms
from django.utils.translation import ugettext_lazy as _
from registration.forms import RegistrationForm
from .models import User
class UserRegistrationForm(RegistrationForm):
first_name = forms.CharField(max_length=30, label=_("First name"))
last_name = forms.CharField(max_length=30, label=_("Last name"))
class Meta:
model = User
fields = ("email", "first_name", "last_name")
我怀疑我必须在某个地方实现register方法,但不知道如何在哪里实现。
我找到了,但我不知道用它做什么。好的。我让它工作了。在此处为后代发布解决方案。 我的帐户/视图.py
from django.contrib.sites.shortcuts import get_current_site
from registration.backends.default.views import RegistrationView
from registration.models import RegistrationProfile
from registration import signals
from .forms import UserRegistrationForm
from .models import User
class UserRegistrationView(RegistrationView):
form_class = UserRegistrationForm
def register(self, request, form):
site = get_current_site(request)
if hasattr(form, 'save'):
new_user_instance = form.save()
else:
new_user_instance = (User().objects
.create_user(**form.cleaned_data))
new_user = RegistrationProfile.objects.create_inactive_user(
new_user=new_user_instance,
site=site,
send_email=self.SEND_ACTIVATION_EMAIL,
request=request,
)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user
并在accounts/url.py中进行更改
from registration.views import RegistrationView
到
您应该在RegistrationView类上实现它。您能给我们看一下RegistrationView吗?我想您应该编写一个从RegistrationView继承的自定义视图,与中的
RegistrationBackend
相同。然后重写方法寄存器。不要忘记更改url以使用新继承的类将注册中的替换为注册中的。视图导入注册视图
与注册中的。backends.hmac.views导入注册视图
from .views import UserRegistrationView