NotImplementedError в django-registration при регистрации пользователя

У меня есть приложение django, и я пытаюсь использовать в нем приложение django-registration. А ниже мои настройки и коды

settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'south',
    'registration',
    'user_profile',
 )

AUTH_PROFILE_MODULE = "user_profile.UserProfile"
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)

файл проекта urls.py

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^accounts/', include('user_profile.urls')),
    url(r'^accounts/', include('registration.backends.default.urls')),
 )

Файл user_profile urls.py

from registration.views import RegistrationView

urlpatterns = patterns('',
    url(r'^register/$', RegistrationView.as_view(),
        {'backend': 'user_profile.backends.RegistrationBackend'},
        name='registration_register'),
)

файл user_profile.backends.py

from .forms import RegistrationForm
from user_profile.models import UserProfile
from registration.views import RegistrationView

class RegistrationBackend(RegistrationView):
    def get_form_class(self, request)
        return RegistrationForm

    def register(self, request, **kwargs):
        kwargs["username"] = kwargs["email"]
        user = super(RegistrationBackend, self).register(request, **kwargs)
        UserProfile.objects.create(user=user)
        return user

Таким образом, из приведенного выше кода, когда пользователь нажимает URL-адрес localhost:8000/accounts/register, будет отображаться регистрационная форма, и после ввода всех полей (username,email, password, password) и нажатия кнопки register я получаю ниже NotImplementedError

NotImplementedError at /accounts/register/
No exception supplied
Request Method: POST
Request URL:    http://localhost:8000/accounts/register/
Django Version: 1.5.1
Exception Type: NotImplementedError

Отслеживание

Traceback:
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in dispatch
  79.         return super(RegistrationView, self).dispatch(request, *args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  86.         return handler(request, *args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in post
  35.             return self.form_valid(request, form)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in form_valid
  82.         new_user = self.register(request, **form.cleaned_data)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in register
  109.         raise NotImplementedError

Exception Type: NotImplementedError at /accounts/register/
Exception Value: 

может кто-нибудь знает, как избежать этого NotImplementedError, на самом деле, согласно исходному представлению на python2.7/site-packages/registration/views.py, метод 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

Но я предоставляю бэкэнд-класс для использования для регистрации пользователя в моем URL-адресе как {'backend': 'user_profile.backends.RegistrationBackend'},, но все же он не переопределяет и не отображает функциональную ошибку источника.

Итак, что я делаю неправильно в приведенном выше сценарии и как это исправить и заставить пользователя сохранить?

Изменить

После изменения кода, как указано Paco

при попытке зарегистрировать пользователя я получил ошибку ниже

error at /accounts/register/
[Errno 111] Connection refused
Request Method: POST
Request URL:    http://localhost:8000/accounts/register/
Django Version: 1.5.1
Exception Type: error
Exception Value:    
[Errno 111] Connection refused

Отслеживание

Traceback:
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in dispatch
  79.         return super(RegistrationView, self).dispatch(request, *args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  86.         return handler(request, *args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in post
  35.             return self.form_valid(request, form)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/views.py" in form_valid
  82.         new_user = self.register(request, **form.cleaned_data)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/backends/default/views.py" in register
  80.                                                                     password, site)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/db/transaction.py" in inner
  223.                 return func(*args, **kwargs)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/models.py" in create_inactive_user
  91.             registration_profile.send_activation_email(site)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/registration/models.py" in send_activation_email
  270.         self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/contrib/auth/models.py" in email_user
  422.         send_mail(subject, message, from_email, [self.email])
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/core/mail/__init__.py" in send_mail
  62.                         connection=connection).send()
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/core/mail/message.py" in send
  255.         return self.get_connection(fail_silently).send_messages([self])
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py" in send_messages
  88.             new_conn_created = self.open()
File "/home/user/proj/combined/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py" in open
  49.                                            local_hostname=DNS_NAME.get_fqdn())
File "/usr/lib/python2.7/smtplib.py" in __init__
  249.             (code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py" in connect
  309.         self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py" in _get_socket
  284.         return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.7/socket.py" in create_connection
  571.         raise err

Exception Type: error at /accounts/register/
Exception Value: [Errno 111] Connection refused

person Shiva Krishna Bavandla    schedule 24.09.2013    source источник


Ответы (3)


Моя аналогичная проблема решена

from registration.backends.model_activation.views import RegistrationView

вместо

from registration.views import RegistrationView

в urls.py (джанго 1.9)

person Николай Гордеев    schedule 24.06.2016
comment
Это проблема в django 1.11, если вы хотите импортировать RegistrationView реализовать RegistrationFormUniqueEmail следующим образом: url(r'^accounts/register/$', RegistrationView.as_view(form_class=RegistrationFormUniqueEmail), name='registration_register'), - person Rob Mascaro; 24.04.2018
comment
Исправили и мне! Я использую Джанго 3.1. Я использовал from django_registration.backends.activation.views import RegistrationView . Также есть from django_registration.backends.one_step.views import RegistrationView - person moltenform; 30.09.2020

Вам не нужно наследовать от метода, который вызывает NotImplementedError. Попробуйте это вместо этого.

def register(self, request, **kwargs):
    UserProfile.objects.create(**kwargs)
    return user

В противном случае вы также унаследуете прибавку.

Ваше редактирование - это другая проблема.

Посмотрите это. Это связано с функцией send_mail. Я цитирую:

В целях отладки вы можете настроить локальный smtpserver с помощью этой команды:

python -m smtpd -n -c Сервер отладки локальный хост: 1025

и соответствующим образом настройте параметры почты:

EMAIL_HOST = 'localhost' EMAIL_PORT = 1025

Это задокументировано здесь: Тестирование отправки электронной почты

person Paco    schedule 24.09.2013
comment
k, когда я использовал приведенный выше код, он отображает «[Errno 111] Отказ в соединении», см. мой отредактированный вопрос выше - person Shiva Krishna Bavandla; 24.09.2013
comment
Откуда в приведенном выше примере user в методе? - person Julio Marins; 26.03.2016

Если у вас `[Errno 111] Отказ в соединении', у вас должен быть почтовый сервер для отправки электронной почты (он же postfix или sendmail). Запустите свой почтовый сервер!

person user2947856    schedule 02.11.2013