Flask-WTForm ile reCAPTCHA Kullanımı

Flask-WTForm, form yönetimi ve form validation gibi işlemleri sunucu tarafında yapmamıza olanak sağlayan WTForms kütüphanesinin bir Flask eklentisidir. Bu yazıda ise WTForms ile nasıl Google reCAPTCHA kullanacağımıza değineceğiz. O zaman başlayalım!

Flask-WTForm ile reCAPTCHA Kullanımı

Öncelikle Google reCAPTCHA Console‘a gidip yeni bir form oluşturmamız gerekiyor.

Label kısmına bir isim giriyoruz, diğer formlar ile karıştırmamak için. reCAPTCHA type için V2 seçiyoruz ve açılan alanda “I’m not a robot” Checkbox seçeneğini işaretliyoruz. Domains alanına ise, formun çalışacağı domain’leri belirtiyoruz ve sözleşmeyi onaylayıp kaydediyoruz.

Ardından bize erişim kodları verilecektir. Bu kodları bir kenara not alıyoruz.

Artık Flask tarafına geçebiliriz.

Normal bir login form sınıfımız olduğunu farz edelim.

from flask_wtf import FlaskForm, RecaptchaField
from wtforms import StringField, PasswordField, SubmitField

class LoginForm(FlaskForm):
    username = StringField('username')
    password = PasswordField('password')
    recaptcha = RecaptchaField()
    submit = SubmitField('Giriş')

Bu, hemen hemen standart, biraz da kısaltılmış bir login form sınıfıdır. Burada fazladan sadece RecaptchaField nesnesini kullandık, ki bu bizim doğrulama işlemini gerçekleştirdiğimiz alan(field) oluyor. Bunu aynen template içine gömüyoruz.

{{ form.recaptcha() }}

Şimdi, yukarıda aldığımız erişim anahtarlarını Flask’a tanıtmamız gerekiyor. Config olarak ekliyoruz.

app.config['RECAPTCHA_PUBLIC_KEY'] = 'YOUR-PUBLIC-KEY'
app.config['RECAPTCHA_PRIVATE_KEY'] = 'YOUR-SECRET-KEY'

Artık rota tanımlamamızı yapabiliriz.

@app.route("/", methods=['GET', 'POST'])
def index():
    form = LoginForm()
    if request.method == 'POST' and form.validate():
        return "Giriş Başarılı!"

    return render_template('index.html', form = form)

Template kısmı aşağıdaki şekildedir.

<html>
    <head>
        <title>Peptr.Net</title>
    </head>
    <body>
        <h1>Peptr Test Panel</h1>
        <form action = "" method = "POST">
        {{ form.hidden_tag() }}
        {{ form.username() }}<br>
        {{ form.password() }}<br>
        {{ form.recaptcha() }}<br>
        <ul>
            {% for error in form.recaptcha.errors %}
                <li style="color:red;">{{ error }}</li>
            {% endfor %}
        </ul>
        {{ form.submit() }}
        </form>
    </body>
</html>

Tüm kodların son hali ise aşağıdaki şekildedir.

from flask import Flask, render_template, request
from flask_wtf import FlaskForm, RecaptchaField
from wtforms import StringField, PasswordField, SubmitField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'Thisisasecret!'
app.config['RECAPTCHA_PUBLIC_KEY'] = '6LfvedUUAAAAAP4ywRip8QV0k9pLpcMyNpFa--Kk'
app.config['RECAPTCHA_PRIVATE_KEY'] = '6LfvedUUAAAAAF6Wfpnfl5YmsDh8qWKcTliyDM3g'

class LoginForm(FlaskForm):
    username = StringField('username')
    password = PasswordField('password')
    recaptcha = RecaptchaField()
    submit = SubmitField()

@app.route("/", methods=['GET', 'POST'])
def index():
    form = LoginForm()
    if request.method == 'POST' and form.validate():
        return "Giriş Başarılı!"

    return render_template('index.html', form = form)

if __name__ == "__main__":
    app.run()

Görüldüğü gibi, işlem tamam! Artık formlarımız Google reCaptcha ile güvende! Kolay gelsin. 🙂

Diğer Flask yazıları için #Flask etiketini kullanabilirsiniz.

Leave a comment