flask网站加入验证码功能的几个问题

今天一上午的主要工作是了解了几种验证码实现的方法,由于网站后端我选择的是flask,所以选择了以路由为基础的验证码发送机制。在这其中遇到了许多问题,导致最终耗时一个白天才最终实现了该功能,做个记录,以便参考。

验证码机制的选择

验证码生成和发送机制的选择采用了 该博主的方法。将验证码由一个特定路由(code)下的视图函数通过response返回给客户端。在模板中仅需要加入一个img标签并将src设置为该路由对应的url地址(即url_for('auth.code'))。
验证码由视图函数产生。使用的是PIL模块。下面是头疼的几个问题!

1.python2.6不支持PIL

在安装pillow时总是出错,显示python2.6不支持pillow了。PIL模块是必不可少的,那么只能装高版本的python了。这又是另外一个问题了。

2.安装python2.7.10

linux系统中安装多版本python实在是令人头疼,首先需要下载安装包,解压安装,更改软连接。还有pip工具的冲突,yum的不兼容等等问题。但终归找到了救星——pyenv。 pyenv的安装使用可参考这位博主的文章。环境变量什么的还不是很懂,但安装完之后使用是非常非常地方便。安装了多版本的python根本不需要担心冲突啦。随后删除了原来的venv虚拟环境,创建了新的,pip安装了PIL。原以为大功告成,难点其实还在后面。

3.sqlite3的安装

安装数据库sqlite时莫名出错, error command 'gcc' failed with exit status 1 。经过网上查找,原因出在没有安装支持库sqlite-devel。安装之,错误排除。

4.数据库报错

报错信息, ImportError: /usr/local/python2.7/site-packages/pysqlite2/_sqlite.so: undefined symbol: sqlite3_stmt_readonly。太可怕了,这种错误看着挺偏的。好在找到了一位大神的博客,真的对这样命令信手拈来,排错步步逼近的大神五体投地。深知自己的知识面和技能太过狭窄和弱小了。下载了最新的安装包,解压,在任意目录安装后find命令找到.so.0文件,复制进usr\lib目录内。排错完成。

5.图片发送问题

验证码的发送时很耗时的一个排错。源于验证码生成后是一个PIL库的Image对象,在调用第一个超链接中博主的app.make_response()和String.Sting()方法失败后就一直不得要领(其实是一直不懂)。最后采用的是BytesIO方法,构造了一个可以存储字节信息的对象。使用img.save(B=BytesIO(),'jpeg')的方式,将img信息存入一个对象中。最后构造Response,因为Response是返回的字节流信息,所以对前面的字节对象B还需要调用B.getvalue()方法来获取其存储的字节流信息。return Response(B.getvalue(),mimetype='image/jpeg')。整个过程中还试图采用将img存入一个文件,再open下来,再发送。会产生验证码的堆积,烦死(主要是改进的方法也失败了)。

6.验证码路径的问题

我发现了这才是最坑的,视图函数中的路径应该写成auth.route('/code')。我多加了一个/导致了客户端发送了一些回应为close connection的包,这种泛型的错误怎么排?发现都是第一次登录页面出现code加载不出来,后来刷新后都出来了。觉得可能跟路径相关,改了一下,问题消失。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值