Пользовательская регистрационная форма django-registration (поле recaptcha)

Я пытаюсь добавить поле recaptcha в свою регистрационную форму и следую руководству Маркоса:

http://www.marcofucci.com/tumblelog/26/jul/2009/integrating-recaptcha-with-django/

В моем регистрационном приложении у меня есть файл «forms.py», который выглядит так:

from recaptcha import fields as captcha_field
from registration.forms import RegistrationFormUniqueEmail

class RecaptchaRegistrationForm(RegistrationFormUniqueEmail):
  recaptcha = captcha_field.ReCaptchaField()

и urls.py, который включается в /accounts моим широким решением urls.py:

from django.conf.urls.defaults import *
from registration.views import register
from forms import RecaptchaRegistrationForm
urlpatterns = patterns('users.views',
                       (r'^$', 'profile'),
                       url(r'^register/$', register, {'form_class': RecaptchaRegistrationForm}, name='registration_register'),
                      )

Теперь, когда я захожу в /accounts/register/, я получаю это сообщение об ошибке:

Значение исключения: register() принимает как минимум 2 аргумента, не являющихся ключевыми словами (1 указан)

Понятия не имею почему.


person Kai    schedule 14.12.2009    source источник
comment
Можете ли вы показать код для представления register?   -  person Daniel Roseman    schedule 14.12.2009
comment
Код для представлений регистрации django находится здесь: bitbucket.org /ubernostrum/django-registration/src/tip/   -  person Kai    schedule 14.12.2009


Ответы (3)


'backend' не является необязательным аргументом. Не могли бы вы прикрепить трассировку стека вашего исключения? Похоже, он пытается использовать DefaultBackend как строку.

person Marco Fucci    schedule 14.12.2009
comment
Трассировка: Файл /usr/lib/pymodules/python2.6/django/core/handlers/base.py в get_response 92. response = callback(request, *callback_args, **callback_kwargs) Файл /usr/local/lib/python2. 6/dist-packages/registration/views.py в регистре 178. backend = get_backend(backend) Файл /usr/local/lib/python2.6/dist-packages/registration/backends/__init__.py в get_backend 22. i = path.rfind('.') Тип исключения: AttributeError at /accounts/register/ Значение исключения: тип объекта 'DefaultBackend' не имеет атрибута 'rfind' - person Kai; 14.12.2009
comment
Что ж, я попробовал: 'backend':'registration.backends.default.DefaultBackend', и сообщения об ошибке больше нет, но в то же время я не получаю поля recaptcha. - person Kai; 14.12.2009
comment
3 возможности: 1 - вы не указали аргумент form_class (если он не указан, он будет получен из регистрационного бэкенда). 2 - вы не отображаете свою форму с помощью {{ form }} (или {{ form_as_p } }) 3 - у вас проблемы с настройкой рекапчи. В этом случае попробуйте создать форму с помощью оболочки Python и распечатать ее. Вы должны увидеть ошибку, если что-то настроено неправильно. - person Marco Fucci; 14.12.2009
comment
Ааа, я забыл изменить шаблон. grml Спасибо, что подтолкнули меня к этому. - person Kai; 14.12.2009
comment
Скопируйте и вставьте этот код для urls.py, он должен работать. urlpatterns = patterns('', url(r'^register/$', register, { 'backend': 'registration.backends.default.DefaultBackend' ,'form_class': RecaptchaRegistrationForm}, name='registration.views.register'), (r'', include('registration.urls')), ) - person vkrams; 18.09.2012

Первый запрашиваемый аргумент, не являющийся ключевым словом, — это request, который получает автоматически.

Второй аргумент, не являющийся ключевым словом, который он не получает, — это сервер аутентификации.

Чтобы быстро начать работу, вы можете просто использовать по умолчанию backend, который поставляется с регистрацией django. Я не могу легко проверить это сам, но это должно сделать это:

from django.conf.urls.defaults import *
from registration.views import register
from forms import RecaptchaRegistrationForm
from registration.backends.default import DefaultBackend
urlpatterns = patterns('trackerbase.users.views',
                       (r'^$', 'profile'),
                       url(r'^register/$', register, {
                       'backend': DefaultBackend,
                       'form_class': RecaptchaRegistrationForm,
                       }, name='registration_register'),
                       )

Взгляните на файл, на который вы ссылаетесь, начиная с в строке 95. Чтение этого должно сказать вам все, что вам нужно знать.

person John Debs    schedule 14.12.2009
comment
Я пробовал это раньше, это не работает. Я получаю эту ошибку: › Значение исключения: тип объекта 'DefaultBackend' не имеет атрибута 'rfind' Из-за этого и из-за того, что он говорит, что бэкэнд является необязательным аргументом, я подумал, что это просто неправильный способ заставить его работать, и не сделал' не упоминать об этом в моем вопросе. - person Kai; 14.12.2009
comment
Попробуйте «бэкенд»: «registration.backends.default.DefaultBackend». - person luc; 16.07.2010
comment
Я всегда получаю сообщение об ошибке в этой строке, когда пытаюсь внедрить капчу из того же блога marcofucci из Registration.forms import RegistrationForm, а также в представлениях. Я пошел в оболочку Python, и я не получаю это предупреждение, пожалуйста, помогите мне - person vkrams; 17.09.2012

Вы можете использовать recaptcha-client. Для пошаговой процедуры вы можете следовать k0001 работает из коробки.

person piyer    schedule 14.12.2009