实际上Flask-wtf中已经整合了Google的reCAPTCHA。即
flask_wtf.recaptcha.RecaptchaField,它内置了一个
Recaptchavalidator。
你只需配置一下public_key(RECAPTCHA_PUBLIC_KEY)和secret_key(RECAPTCHA_PRIVATE_KEY):
app = Flask(__name__) app.config["RECAPTCHA_PRIVATE_KEY"] = 'xxxxxxxxxxxxxxxxxxxxxx' app.config["RECAPTCHA_PUBLIC_KEY"] = 'xxxxxxxxxxxxxxxxxxxxxx'
在自己定义的Form中加上这个Field,
class MyForm(FlaskForm): # something # ... recaptcha = recaptcha.RecaptchaField()
然后模版中渲染,
<form action="/somewhere", method="post"> <!-- something --> {{ form.recaptcha }} <button type="submit">提交</button> </form>
不过,事情并没有那么简单。由于我大天朝网络方面的问题(你懂的),我们并不能访问Google。所以项目运行起来是看不到reCAPTCHA的身影的。
但是,在网上查找一波之后,有人说改用www.recaptcha.net这个域名可以正常使用reCAPTCHA。事实上是真的。http://waifu2x.udp.jp/这个就印证了。
我去,申请reCAPTCHA密钥时官方给出的JS地址和API地址:
https://www.google.com/recaptcha/api.js
https://www.google.com/recaptcha/api/siteverify
有了新域名还藏着掖着。。。
回归正题,Flask-wtf中的Recaptcha validator使用的地址就是上面的www.google.com地址。
JS链接定义的位置在flask_wtf/recaptcha/widgets.py,常量RECAPTCHA_SCRIPT。
另一个链接定义的位置在flask_wtf/recaptcha/validators.py,常量RECAPTCHA_VERIFY_SERVER。
接下来要做的简单了。
你可以直接更改Flask-wtf的源代码:
# flask_wtf/recaptcha/widgets.py RECAPTCHA_SCRIPT = u'https://www.google.com/recaptcha/api.js' # 改成 RECAPTCHA_SCRIPT = u'https://www.recaptcha.net/recaptcha/api.js'
# flask_wtf/recaptcha/validators.py RECAPTCHA_VERIFY_SERVER = 'https://www.google.com/recaptcha/api/siteverify' # 改成 RECAPTCHA_VERIFY_SERVER = 'https://www.recaptcha.net/recaptcha/api/siteverify'
像我这样有强迫症的、不想改模块源代码的同学可以用一下方法:
from flask_wtf import recaptcha recaptcha.validators.RECAPTCHA_VERIFY_SERVER = 'https://www.recaptcha.net/recaptcha/api/siteverify' recaptcha.widgets.RECAPTCHA_SCRIPT = 'https://www.recaptcha.net/recaptcha/api.js'
当然,你要保证这段代码会被执行到。
关于Flask-wtf使用reCAPTCHA可以去看看文档:
http://flask-wtf.readthedocs.io/en/stable/form.html#recaptcha
近期评论