比特股教程实时更细

bitshares研究系列【水龙头加上验证码】

2018-05-31  本文已影响64人  聂怀远

chaimyu (55) 在 bitshares • 昨天

前面说过的faucet已经被改为python flask版本的了,自然是要加入需要的功能,这次尝试在注册时加入验证码功能。

captcha

安装

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

测试结果:

recaptucha

安装依赖库

(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

flask-session-captcha

安装:

(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

上一篇 下一篇

猜你喜欢

热点阅读