bitshares研究系列【水龙头加上验证码】
chaimyu (55) 在 bitshares • 昨天
前面说过的faucet已经被改为python flask版本的了,自然是要加入需要的功能,这次尝试在注册时加入验证码功能。
安装
pip install captcha
测试代码
from captcha.audio import AudioCaptcha
from captcha.image import ImageCaptcha
# audio = AudioCaptcha(voicedir='/path/to/voices')
image = ImageCaptcha(fonts=['./fonts/Vera.ttf'])
# data = audio.generate('1234')
# audio.write('1234', 'out.wav')
data = image.generate('abcd')
image.write('abcd', './captcha1.png')
Vera.ttf可以在此下载https://github.com/agoravoting/flask-captcha/blob/master/flask_captcha/fonts/Vera.ttf
测试结果:
安装依赖库
(env3) Chaim:python Chaim$ pip install flask-recaptcha
...
Successfully built flask-recaptcha
Installing collected packages: flask-recaptcha
Successfully installed flask-recaptcha-0.4.2
在templates目录中配置网页模块captcha.html:
{{ recaptcha }}
在views.py中加入:
from flask_recaptcha import ReCaptcha
# recaptcha
app.config.update({
"debug": True,
"RECAPTCHA_SITE_KEY": "SITE_KEY",
"RECAPTCHA_SITE_SECRET": "SECRET",
"RECAPTCHA_ENABLED": True
})
recaptcha = ReCaptcha()
recaptcha.init_app(app)
views.py加入以下route:
@app.route('/captcha')
def captcha():
return render_template("captcha.html")
# strCode = recaptcha.get_code()
# print(strCode)
# return strCode
@app.route('/submit', methods=['POST', 'GET'])
def submit():
if recaptcha.verify():
print("verify ok!")
return "ok"
else:
print("verify fail!")
return "fail"
调用 /captcha 测试结果:
get_code()返回结果如下:
从get_code返回结果看出ReCaptcha是Google的,要连接Google网站,在GFW中根本就没法使用!
特别注意,要指定config中参数才能正常显示,否则什么也不显示,is_enable为false
安装:
(env3) Chaim:zos-pyfaucet Chaim$ pip install flask-sqlalchemy
(env3) Chaim:zos-pyfaucet Chaim$ pip install flask_session
(env3) Chaim:zos-pyfaucet Chaim$ pip install flask-session-captcha
在templates中加入captcha.html
在views.py加入代码:
import uuid
from flask_session import Session
from flask_session_captcha import FlaskSessionCaptcha
# captcha
app.config["SECRET_KEY"] = uuid.uuid4()
app.config['CAPTCHA_ENABLE'] = True
app.config['CAPTCHA_NUMERIC_DIGITS'] = 5
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.config['SESSION_TYPE'] = 'sqlalchemy'
Session(app)
captcha = FlaskSessionCaptcha(app)
# captcha end
在views.py加入route
@app.route('/getcaptcha')
def getcaptcha():
return render_template("captcha.html")
@app.route('/checkcaptcha', methods=['POST', 'GET'])
def checkcaptcha():
print(request)
if captcha.validate():
print("validate ok!")
return "ok"
else:
print("validate fail!")
return "fail"
在浏览器中访问 /getcaptcha,输入验证码:
查看网页源代码,发现这个是直接加入img标签,图像数据是base64直接在网页代码中,这样就能在各个环境下使用了!
验证码功能测试成功了,注册时加上验证码功能只是多做了这个验证,就不再细说了!
感谢您阅读 @chaimyu 的帖子,期待您能留言交流!
https://steemit.com/bitshares/@chaimyu/4ehlxv-bitshares