2013-06-25 3 views
3

Я следую за сообщением Maro Fucci для интеграции ReCaptcha для регистрации в Django. Он отлично работал в Django 1.4. Однако после обновления до Django 1.5 у меня возникла проблема с представлениями на основе классов, которые я разрешил, и теперь я могу отобразить регистрационную форму на странице. Самой большой проблемой является recaptcha ее не рендеринг.Recaptcha не отображается для Django Регистрация в Django1.5

Я вставляю точный код, который я написал.

Мои проекты urls.py

from django.conf.urls import patterns, include, url 
from django.conf import settings 
from django.conf.urls.static import static 
urlpatterns = patterns('', 
     ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

urlpatterns = patterns('', 

    url(r'^$', 'myapp.views.index'), 
    (r'^accounts/', include('registration.backends.default.urls')),) 

Мой urls.py Применение

from django.conf.urls.defaults import * 
from registration.views import RegistrationView 

from myapp.forms import RecaptchaRegistrationForm 

urlpatterns = patterns('', 
    url(r'^register/$', RegistrationView.register, 
    {'form_class': RecaptchaRegistrationForm}, 
    name='registration.RegistrationView.register'), 
    (r'', include('registration.backends.default.urls')), 
) 

Я разместили widgets.py и fields.py, который был размещен в Marco Fucci странице в папке MYAPP и myapp.forms.py выглядит следующим образом:

from django import forms 
from myapp.fields import ReCaptchaField 
from registration.forms import RegistrationForm 
class RecaptchaRegistrationForm(RegistrationForm): 
     recaptcha = ReCaptchaField() 

Я напечатал регистрационную форму с помощью manage.py он печатает регистрационную форму рекапчи, как показано ниже

>>> from myapp.forms import RecaptchaRegistrationForm 
>>> p = RecaptchaRegistrationForm() 
>>> print p 
<tr class="required"><th><label for="id_username">Username:</label></th><td><input id="id_username" maxlength="30" name="username" type="text" /></td></tr> 
<tr class="required"><th><label for="id_email">E-mail:</label></th><td><input id="id_email" name="email" type="text" /></td></tr> 
<tr class="required"><th><label for="id_password1">Password:</label></th><td><input id="id_password1" name="password1" type="password" /></td></tr> 
<tr class="required"><th><label for="id_password2">Password (again):</label></th><td><input id="id_passwo" name="password2" type="password" /></td></tr> 
<tr class="required"><th><label for="id_recaptcha">Recaptcha:</label></th><td> <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6LcPF-KEY"></script> 

Но когда я называю http://localhost:8000/accounts/register/ из браузера рекапчи не делает. Регистрационная форма не наследует Recaptcha. Может быть, я делаю что-то глупое. Может ли кто-нибудь мне посоветовать.

+0

Считаете ли вы, что-то не так с шаблонами? – vkrams

ответ

2

При использовании class based view в шаблонах URL укажите ваш шаблон URL-адреса на метод as_view(). Вы не можете просто включить метод RegistrationView.register напрямую.

Чтобы настроить поведение RegistrationView, подклассируйте его и установите атрибут form_class.

class RecaptchaRegistrationView(RegistrationView): 
    """ 
    Subclass of RegistrationView that uses RecaptchaRegistrationForm 
    """ 
    form_class = RecaptchaRegistrationForm 

urlpatterns = patterns('', 
    url(r'^register/$', RecaptchaRegistrationView.as_view(), name='registration_register'), 
+0

Я добавил регистрацию 'RecaptchaRegistrationView' в' registration.views' и изменил urlpatterns. Но все равно его не рендеринг – vkrams

+0

Возможно, я делаю что-то неправильно. Я буду почитать. Тем не менее, я могу правильно назвать остальные классы, а именно: «login», «reset», «forget» – vkrams

0

Вы можете убедиться, что (при отладке), что ваш RecaptchaRegistrationForm становится подобрал, когда вы вызываете вид регистра.

А также, Открытый ключ в визуализированном html представляется неправильным. 6LcPF-KEY

+0

Печать ReCaptcha - это рендеринг, как показано в моем вопросе. Я только что обрезал открытый ключ. – vkrams

+0

Хорошо, так что последний html, отображаемый в представлении, имеет в нем скрипт ReCaptcha? – Sudipta

+0

Да. Я пытаюсь использовать нижеследующее решение. – vkrams