4 Temmuz 2014 Cuma

CAPTCHA Kullanımı

CAPTCHA kelimesini ilk defa duymuş olabilirsiniz. Ama hayatınız da en az bir kere kullanmışsınızdır. CAPTCHA kısaca; insan ile bilgisayarı birbirinden ayırmak için kullanılan bir projedir. Merak edeneler CAPTCHA nedir? tıklayarak okuyabilirler. Zaten hemen anlayacaksınız. Google'ın CAPTCHA'sı
Windows Üzerine Kurulum
CAPTCHA'yı kurabilmek için iki şeye ihtiyacımız vardır;
  • PIL(Python Imagin Library)
  • Python Setuptools
CAPTCHA'yı kurabilmemiz için sistemimize bu ikisini kurmamız gerekiyor. Bu işlemleri yaptıktan sonra artık CAPTCHA'yı kurabiliriz. Bunun için https://github.com/mbi/django-simple-captcha adresinden CAPTCHA'yı indirin. İndirdikten sonra zip dosyasından çıkartın. Komut satırında-cmd- çıkarttığınız dizin içerisine girerek şu komutu verin.
python.exe setup.py install
Bu komutu verdikten sonra CAPTCHA kurulmuş olacaktır.
Linux Üzerine Kurulum
Linux üzerine kurulumun Windows'tan hiç bir farkı yok aslında. Yine yapmamız gereken PIL ve Setuptools'u kurmak. Gerçi bunlar Linux'ta kurulu olarak geliyor. Ardından aynı şekilde verdiğimiz linkten CAPTCHA'yı indirerek aynı komutu vererek kurmalısınız. Biz sizin için bu işlemlerin komut satırından yapılan halini şu şekilde verelim.
apt-get install python-imaging #PIL
apt-get install python-setuptools
wget https://github.com/mbi/django-simple-captcha/zipball/master
unzip master
cd mbi-django-simple-captcha-060b00e
python setup.py install
CAPTCHA'yı kurduğumuzu göre artık projemize dahil edebiliriz. Bunun için hastahane/settings.py dosyasında INSTALLED_APPS değişkenine şu satırı eklemeliyiz.
'captcha',
Veritabanında CAPTCHA ile ilgili tabloları oluşturmak için komut satırından şu komutu çalıştıralım;
python manage.py syncdb
Creating tables ...
Creating table captcha_captchastore
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
Kurulum tamam mı? Bunu denetleyelim. Komut satırından şu komutu verin.
python manage.py test captcha
Creating test database for alias 'default'...
....................
----------------------------------------------------------------------
Ran 20 tests in 0.772s

OK
Destroying test database for alias 'default'...
Eğer sizde bu şekilde hata ile karşılaşmadıysanız kurulum tamam demektir. Kurulum tamam olduğuna göre artık kullanabiliriz.
hastahane/urls.py dosyasının en altına şu satırları ekleyin.
urlpatterns += patterns('',
                        url(r'^captcha/',include('captcha.urls')),
                        )
Artık sadece CAPTCHA'yı kullanmak istediğimiz formda kullanmak kaldı. Bir önceki başlıkta kullanıcı kayıt formu hazırlamıştık. Şimdi bu hazırladığımız forma CAPTCHA'yı ekleyelim. Bunu için ilk önce hastahane/forms.py dosyasına dahil etmemiz gerekiyor. Şu satırı ekleyin;
from captcha.fields import CaptchaField
Bu dosyada tanımlamış olduğumu KullaniciKayitFormu sınıfına dahil edebiliriz. Bunun için bu KullaniciKayitFormu sınıfının ilk satırlarına şu kodları ekliyoruz.
    captcha = CaptchaField() ##captchanın dahil edilmesi
    captcha.help_text='Resimde gördüğünüz harfleri kutuya yazınız.' #kullanıcıya gösterilecek açıklama
    captcha.label='Doğrulama Kodu' #Etiket. Eğer kullanılmazsa var sayılan olarak CAPTCHA'dır.
Bu satırları ekledikten sonra KullaniciKayitFormu'nun son hali şu şekilde olacaktır.
from captcha.fields import CaptchaField

class KullaniciKayitFormu(UserCreationForm):
    captcha = CaptchaField()
    captcha.help_text='Resimde gördüğünüz harfleri kutuya yazınız.'
    captcha.label='Doğrulama Kodu'
    class Meta:
        model = User
        fields = ('first_name','last_name','username','email')

    def clean_email(self):
        if not self.cleaned_data['email']:
            raise forms.ValidationError(u'E-posta adresi girin.')

        if User.objects.filter(email__iexact=self.cleaned_data['email']):
            raise forms.ValidationError(
                u'''
                Bu e-posta başka bir kullanıcı tarafından kullanılıyor.
                Başka bir e-posta kullanmayı deneyin.
                '''
            )
        return self.cleaned_data['email']
CAPTCHA'nın kullanımı bu kadar. Geri her şeyi Django bizim için halledecek. Kontrol kısımları ile biz ilgilenmiyoruz. Onlar Django'nun işi. Gerçekten basit değil mi?
Taryıcıdan http://localhost:8000/kayit/ yazarak kayıt formuna gidelim. Şöyle bir sayfa ile karşılaşacağız.
CAPTCHA ile ilgili ayarları hastahane/settings.py dosyası içersinde yapabiliriz. Varsayılan olarak dört karakterden oluşan bir CAPTCHA görüyorsunuz. Bunu değiştirmek isterseniz settings.py dosyasına şu satırı eklemeniz yeterli.
CAPTCHA_LENGTH = 6
Varsayılan olarak 22px boyutundadır. Değiştirmek için;
CAPTCHA_FONT_SIZE = 25
Arka plan rengi varsayılan olarak #ffffff -beyaz- gelmektedir. Değiştirmek için;
CAPTCHA_BACKGROUND_COLOR = '#ddd'
Bu kullanımda CAPTCHA karakterleri rastgele oluşturulmaktadır. Eğer istersek bir kelime listesinden de seçim yaptırabiliriz. Eğer bir Linux kullanıyorsanız ve yol belirtmez iseniz varsayılan olarak /usr/share/dict/words dosyası kullanılır.
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.word_challenge'
Şuan herhangi bir dosya belirtmediğimiz için Linux işletim sisteminde /usr/share/dict/words dosyası kullanılarak CAPTCHA oluşturuldu. Eğer kontrol ederseniz üretilen her kelimenin bu dosya içerisinde olduğunu görebilirsiniz. Windows işletim sistemi kullananlar ise kendileri bir liste edinerek yolunu belirtmeliyiz.
CAPTCHA_WORDS_DICTIONARY = '/home/mazlum/captcha.txt'
Artık üretilecek CAPTCHA'lar bu dosya içerisinden seçilecektir. Eğer istersek bu şekilde kelime olan bir CAPTCHA yerine aritmatiksel işlemlerin sonucunu soran bir CAPTCHA'da oluşturabiliriz. Bunun için şu satırı ekleyin;
CAPTCHA_NOISE_FUNCTIONS=None # Resmin arkasindaki bozuklukgu kaldirir.
CAPTCHA_LETTER_ROTATION=None # Karakterlerin yamuk durmasini engeller.
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
CAPTCHA_NOISE_FUNCTIONS değişkeni CAPTCHA'nın arkaplanını belirler. Varsayılan olarak şu şekilde gelmektedir.
CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_arcs','captcha.helpers.noise_dots',)
Eğer isterseniz bu demet içerisinden herhangi birini kaldırabilirsiniz. Veya None kullanarak arka planın temiz olmasını sağlayabilirsiniz.
CAPTCHA_LETTER_ROTATION değişkeni CAPTCHA üzerindeki karakterlerin eğikliklerini belirler. Varsayılan olarak şu şekilde gelmektedir;
CAPTCHA_LETTER_ROTATION =(-35,+35)
Buradaki değerleri değiştirerek karakterlerin eğiklikleri ile oynayabilir. Veya None kullanarak düz durmalarını sağlayabilirsiniz.
CAPTCHA ile ilgili daha fazla ayara https://django-simple-captcha.readthedocs.org/en/latest/advanced.html adresinden ulaşabilirsiniz.
Kaynakça

0 yorum :

Yorum Gönder