文書操作
Plone CaptchaをCOREBlog2のコメントに利用してみる
いっつも「これでいいのか?」って思いながら。
まぁ、あれです。ソースとか読めなくて禿しく辛いんですが、私の場合は何でもかんでも「試す」のが好きなわけで、「使う」のが好きなのかどうかは二の次なのです。
で、このエントリなんですが、一度書いた後に試したらできてなくて、非公開にしてからもう一度調べ直すという、とてもかっこわるいことをしています。一度調べ始めるとキリがつくまで見て回るのがたたって結局今日も3時就寝になりそうな悪寒。最近4時間半以上寝てないし、タバコも吸いまくりなので、たぶん私は結構早い段階で肺ガンで死ぬと思います。
そんな私のことはどうでもいいのですが、とりあえず調べた事・やった事を時系列で並べていってみることにします。
- まずは http://captchas.netにいって、アカウントを作ります。そうするとメール経由でname(id)とsecret keyがもらえます。
- Plone Captchaをダウンロードして通常のZope Productと同じようにインストール…
- と、待ってください。その前に「Zope-instance/Products/PloneCaptcha/config.py」を開いて、 http://captchas.netからもらったnameとsecret keyを設定しておきます。
- Zopeのリスタート→Ploneの「プロダクトの追加と削除」からインストール、と定番の道筋をたどります。
- 「Zope-instance/Products/PloneCaptcha/README.txt」を読むと、まずはページテンプレートにCaptchaマクロをぶち込め、と書いてあるので「portal_skins/COREBlog2/cbcomment_form」の適所に(私はクッキーボタンの直前に書きました)以下のコードをぶち込んでやります。
<div metal:use-macro="here/captcha/macros/edit" />
これだけじゃ寂しいという人はcaptchaのテストコードから以下をぱくってきます。<div class="field"
tal:define="error errors/captcha| nothing;"
tal:attributes="class python:test(error, 'field error', 'field')">
<label i18n:translate="label_captcha_help">Verification Code</label>
<div class="formHelp" i18n:translate="help_plone_captcha">
This helps us prevent automated spamming.
</div>
<div tal:content="error">Validation error output</div>
<div metal:use-macro="here/captcha/macros/edit" />
</div> - で、README.txtは、次にフォームのメタデータファイルにvalidatorとしてvalidate_captchaを指定しろと言っておられる。はて…。さて…。いかがしよう…。validaterがどういうものか抽象的な概念はうっすらと持っている。しかし、フォームのメタデータとかいわれてもさっぱりである。こういうときはボケーっとZMIを眺めてみるのがよい、というのが私の経験則としてある。よって、ボケーっとZMIを眺めていると…。あった。ミラクルである。奇跡である。自分でも信じられない。「portal_form_controller」の中に「validation」とかいう、まさしくビンゴくさい方が鎮座していらっしゃっいました。入力の仕方は何となく雰囲気で「Template」に「cbcomment_form」、「Validators」に「validate_captcha」をしてやりました。…と、ここで「できた」と勘違いしてしまったのが寝不足の始まりです。
ここでの私のミスは、portal_form_controllerというのは確かにvalidatorを設定してくれるのですが、「フツーの」Page Templateじゃダメだという点でした。設定の対象となるのは「Controller」 Page Templateとか「Controller」 Python Scriptとかなのであって、こいつらは「フツーの」Page Templateとはちょっと違った人たちなのだそうです。このことはportal_form_controllerのdocumentに書いてありました(ということに気づくのが遅すぎるという罠)。
で、ここからが無知な私の無駄なあがきの連続で、cbcomment_formを何とかしようと必死になっていたのが運の尽きでした。結果から言うといじるのは「cbentry_view」と「cbcomment_preview」なのでした。ここまでたどりつくために何度コメントをテストしたことか…。この二つに、validatorとしてvalidate_captchaを設定してやるとできるようです(というかできると信じたい)。
さてそれじゃあどうやって「cbentry_view」と「cbcomment_preview」にvalidate_captchaを設定してやるのかということに考えが向かうわけですが、一般に、Controller Page Templateにvalidatorを設定するにはいくつかのアプローチがあるようです。
- ファイルシステム上のテンプレート.メタデータをいじくる
- ファイルシステム上のファイルをいじることができる場合は、ファイルを直接編集する事でvalidatorを設定できる
←こんなふうにcpt(controller page templete)ファイルに「.metadata」をひっつけたやつで設定する
「validators = 」のあとにvalidatorを指定する。複数ある場合はカンマ区切りで羅列する - portal_form_controllerをいじる
- portal_form_controllerのvalidatorタブに行くと設定画面がある(関連アイテム参照)。
- Controller Page Templateオブジェクトをいじる
- 「cbentry_view」や「cbcomment_preview」はController Page Templateオブジェクトなわけで(ファイルシステム上のファイルを見ると拡張子が.cptとなっている)、これらのオブジェクトをZMI上で見ると、フツーのPage Templateと違って、「Validation」やら「Actions」というタブがあるのでここで設定してやる
設定は直感的にわかるかと思います。今回はvalidatorを設定しただけでしたが、validatorが返す値(基本的にsuccessとfailure?)によってその後の挙動を設定したり(Actions)、そのほかにもオブジェクトの種類やボタンの名前やらで制御したりもできるようです。
今回はお手軽に、 「cbentry_view」と「cbcomment_preview」の各オブジェクトのValidationタブで設定しました。ということで、お決まりなんですが「これでいいんだろうか…」。
でもどうせウチのサイトにコメントなんてほとんど来ないんだから、コメントスパム様いらっしゃいまし~くらいのスタンスで行った方が賑わいがあっていいんじゃないかと、そんなふうにも思っちゃう今日この頃。
この時間まで私を起こしていてくれた、くるりとCoccoの音楽に感謝しつつ眠りにつく事にしよう。
追記:このエントリは自分の頭の中で考えた事を時系列で書いているのでわかりにくいかもしれません。COREblog-enのMLにて手順をまとめる機会があったのでとりあえずリンクを貼っておきます。つたない英語ですが、手順そのものはエントリを参照するよりもわかりやすいと思います。
- カテゴリ
-
Plone
- Plone Products
-
COREBlog2
- 固定リンク
- ¦
- コメント (5)
- ¦
- トラックバック (3)
- トラックバック用URL:
- http://nagosui.org:8080/Nagosui/COREBlog2/plone-captcha-and-coreblog2/tbping


ご苦労様です。ではテスター代わりにコメント。
成功するかな?
間違った Verification Code を入れてみよう。
はれられるかな?
ちゃんとはねられました!!
>どなたか
テストありがとうございます。反応があるのはとてもうれしいです。
>たかのりさん
演奏会がんばってください。
あんどラディッシュによるついでに私の演奏会聴きに来ちゃったりしてください(・∀・)
おお~。captcha画像はcaptcha.netに取りに行ってるんですね。
>清水川さん
いいですよね。楽で。
captcha関連の作業はcaptcha.netのアカウント作成とconfig.pyの編集だけですから。