2.4. ReCAPTCHA¶
ReCAPTCHA はボットからのアクセスを防御すると共に、OCRで読み取れない本の文字の解読に活かすシステムです。 現在 Google からサービスを提供しています。
2.4.1. 設定¶
ReCAPTCHAを利用するには次の手順で、Public Key とPrivate Key を取得することが必要です。
モデル定義(db.pyなど)にて、 ReCAPTCHA に関係する属性に Recaptcha
インスタンスを設定します。
設定例
from gluon.tools import Recaptcha
auth.settings.captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY')
第二・第三パラメータには、Public Key と Private Key を設定します。
標準で、認証画面と CRUD 画面 で利用できます。この他にフォーム画面でも利用可能です。これらについては 使用例 を参考にしてください。
2.4.2. Recaptchaクラス¶
Recaptcha クラスのコンストラクタのパラメータについて説明します。
- class
tools.
Recaptcha
(request, public_key, private_key[, use_ssl, error, error_message, label, options])¶
- request
- request オブジェクトを指定します。
- public_key
- ReCAPTCHA の Public Key を指定します。
- private_key
- ReCAPTCHA の Public Key を指定します。
- public_key
- ReCAPTCHA の Private Key を指定します。
- use_ssl
- True を指定すると ReCAPTCHA サーバに SSL/TLS で接続します。 デフォルトは False です。
- error
使用するエラーコードを指定するようです。デフォルトは None です。このパラメータは使用しない方がよいでしょう。もし使用する場合、 ここ に記述されているエラーコードを指定するようです。- error_message
- マッチしなかった場合のエラーメッセージを指定します。デフォルトは ‘invalid’ です。
- label
- ReCAPTCHA のラベルを指定します。デフォルトは ‘Verify:’ です。
- options
オプションを指定します。デフォルトは ‘’ (空値)です。オプションの詳細は、 Customizing the Look and Feel of reCAPTCHA などを参照してください。
2.4.3. ReCAPTCHAに関連する属性¶
Auth
クラスに、ReCAPTCHA に関連する次の属性があります。
Auth.settings.
login_captcha
¶Recaptcha
インスタンス指定しますと ログイン画面で ReCAPTCHA を使用します。もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。
Auth.settings.
register_captcha
¶Recaptcha
インスタンス指定しますと ユーザ登録画面で ReCAPTCHA を使用します。もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。
captcha
は認証画面全体の、他の属性は個々の画面の ReCAPTCHA の設定になります。
これらの設定値の組み合わせをまとめたのが、次の表になります。チェックされている設定で、ReCAPTCHAが動作します。
None インスタンス ✓ None False ✓ ✓ インスタンス ✓ None False ✓ ✓ インスタンス ✓ None False ✓ ✓ インスタンス ✓ None False ✓ ✓ インスタンス
この他、 Crud
クラスにも ReCAPTCHA に関する次の属性があります。
captcha
は CRUD 画面全体の、他の属性は個々の画面の ReCAPTCHA の設定になります。
これらの設定値の組み合わせをまとめたのが、次の表になります。チェックされている設定で、ReCAPTCHAが動作します。
None インスタンス レコード作成
✓ None False ✓ ✓ インスタンス レコード更新
✓ None False ✓ ✓ インスタンス
2.4.4. 使用例¶
ReCAPTCHA を使用する設定を示します。
使用例1(認証画面)¶
使用例2(ユーザ登録画面のみ)¶
from gluon.tools import Recaptcha auth.settings.register_captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY')
使用例3(CRUD画面)¶
使用例4(FORMでの利用)¶
ReCAPTCHAは認証や CRUD 画面だけでなく、FORMでも利用可能です。その場合も Recaptchaクラスを利用できます。
モデル定義
from gluon.tools import Recaptchaコントローラ記述
captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') form=FORM('Your name:', INPUT(_name='name', requires=IS_NOT_EMPTY()), captcha, INPUT(_type='submit')) if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill the form' return dict(form=form)ReCAPTCHA を FORMのコンポーネントとして設定しています。
使用例5(SQLFORMでの利用)¶
ReCAPTCHAは SQLFORM でも利用可能です。
モデル定義
from gluon.tools import Recaptcha db.define_table('comment',Field('text_area', 'text'))コントローラ記述
def comment(): captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') form = SQLFORM(db.comment) form.element('table').insert(-1,TR('',captcha,'')) if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill out the form' return dict(form=form)この設定では、DIVクラスの
element()
メソッドを利用して、ReCAPTCHA をフォームに挿入しています。この他、
tools
モジュール内にあるaddrow()
関数で、ReCPTCHAを組み込むことも可能です。モデル定義
from gluon.tools import Recaptcha, addrow db.define_table('comment',Field('text_area', 'text'))コントローラ記述
def comment(): captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') form = SQLFORM(db.comment, formstyle='table3cols') addrow(form, captcha.label, captcha, captcha.comment, 'table3cols', 'captcha__row') if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill out the form' return dict(form=form)SQLFORMでのイメージです。
使用例6(画面カスタマイズ)¶
Recaptcha
の optionパラメータでカスタマイズ設定を行います。テーマの設定を white に変えてみます。
from gluon.tools import Recaptcha auth.settings.register_captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY', options = 'theme : \'white\'')この他テーマには、blackglass , clean があります。
カスタマイズの詳細は Customizing the Look and Feel of reCAPTCHA を参照ください。