svn checkout http://recaptcha-django.googlecode.com/svn/trunk/ recaptcha-django-read-only
2. Przenosimy folder recaptcha_django do folderu z naszym projektem (niech to będzie mysite), dodajemy 'recaptcha_django' do INSTALLED_APPS w mysite/settings.py. Dodajemy także załączony middleware - do MIDDLEWARE_CLASSES w settings.py dopisujemy na końcu 'recaptcha_django.middleware.ReCaptchaMiddleware'. Ten mały middleware dodaje do POST-a odpowiednich żądań http informacje o ip klienta potrzebną recaptcha. Proponuję odpalić serwer deweloperski. Możesz mieć szczęście i zobaczyć, że brakuje jakiegoś modułu... Wtedy następny punkt jest dla Ciebie.
3. Nie na każdym serwerze jest zainstalowany pythonowy moduł recaptcha-client. Dlatego ściągamy go. Jedynym czego trzeba, by jakiś moduł był dostępny w pythonie, jest obecność tego modułu na ścieżce wyszukiwań modułów [wooow!...], która w przypadku django obejmuje główny katalog projektu (mysite/). Tak więc wrzucamy katalog recaptcha z rozpakowanego archiwum do mysite/.
4. Jeszcze raz odpalamy serwer developerski. Tym razem powinien wstać. Zabieramy się do wzbogacenia naszego formularza (form):
#mysite/forms.py
from django import forms
from recaptcha_django import *
class PortalRegistrationForm(forms.Form):
#tu jakieś mało istotne pola
#...
recaptcha = ReCaptchaField()
Odpalamy serwer, wchodzimy na stronę z naszą formą i widzimy, że brakuje jakichś dziwnych ustawień (RECAPTCHA_PUBLIC_KEY i RECAPTCHA_PRIVATE_KEY). Wpadamy na pomysł, żeby zarejestrować się na ReCaptcha. W nagrodę dostaniemy upragnione wartości zmiennych RECAPTCHA_PUBLIC_KEY i RECAPTCHA_PRIVATE_KEY, które wpisujemy do mysite/settings.py.
I tyle!
Jeśli ktoś chce mieć mniej standardową ReCapchę i chciałby przy okazji poznać kawałek django, to może czytać dalej:
[polecam aplikację django-regitration autorstwa James'a Bennett'a (a.k.a. ubernostrum)]
from registration.forms import RegistrationForm
class PortalRegistrationForm(RegistrationForm):
recaptcha = ReCaptchaField(
label='''Prove that you're a human:'''
#tak oto w django definiuje się niestandardowy opis dla pola formularza
widget=ReCaptchaWidget(
attrs={'theme': 'blackglass'}), #zmieniamy skórkę
# a tak podaje się atrybuty elementom HTMLa do których zostanie
# wyrenderowany formularz. Pisząc 'atrybuty' myślę tu [w przypadku
# standardowych Widget-ów django] o atrybutach HTML,
# np. rows dla textarea:
komentarz = forms.CharField(
widget=forms.Textarea(attrs={'rows': 3})) #krótki komentarz.
)
Naturalnym pytaniem jest: jakie są inne skórki dla ReCaptcha? Odpowiedź tutaj.
EDIT:
Niestety, RecaptchaField wyświetla ochydny error-code zamiast ładnego komunikatu o błędzie. Czytałem trochę ReCaptcha API, ale tam utrzymują, że kody błędów mogą się zmieniać i żeby się tego nie trzymać. Jako że domyślny widget captchy wyświetla komunikat o błędzie, starczy pozbyć się brzydkiego komunikatu o błędzie:
class PortalRegistrationForm(RegistrationForm):
#...jak wyżej...
def clean(self):
cleaned_data = super(PortalRegistrationForm, self).clean()
if 'recaptcha' in self._errors:
self._errors['recaptcha'] = forms.util.ErrorList([])
return cleaned_data
#jak piszą w dokumentacji, "ALWAYS return the cleaned_data" :)
Przeciążamy tutaj metodę odpowiadającą za sprawdzanie poprawnośći formularza tak, by zrobiła to, co zrobiłaby normalnie [super()], a potem zastępujemy listę błędów dla pola 'recaptcha' listą pustą. Krótki, nieinwazyjny, ale dalej hack.
Brak komentarzy:
Prześlij komentarz