首先说一下需要的模块:
qrcode 用于二维码相关处理
time 用于根据时间命名文件
如果没有的话可以用pip自行安装~
web模块实现网站的后台逻辑处理方法:
我们先创建一个页面的处理类
首先需要定义GET请求与POST请求 我们的需求是GET请求时我们给出主页,POST请求时返回一个二维码的图片可以通过web.input直接获取用户求求时传来的json串,这里我们qc为二维码的处理函数,先不用管这样,web处理部分就完成了。
下面开始说二维码的处理方式
version为一个整数,范围1~40,作用表示二维码的大小
error_correction容错率,挡出部分二维码还能识别,越高可以挡住部分越多,但数据量增加
border 表示二维码距离图像外边框的距离
然后我们用qr.add_data方法将引入的参数作为数据传入进去,如果我们想实现其他业务也可以参考其相关的格式导入
比如说实现通讯录,可以搜索vcard格式等
至此,我们差不多是可以将二维码生成出来了。
下面我们给二维码加一个logo,也就是我们自己的商标
通过二维码的尺寸与logo的尺寸算出logo的位置,然后将两张图片叠加即可
这里可能会出现一个错误这是由于我们的logo图片格式所造成的,我们需要用一个png格式的logo,不是png后缀,而是需要转格式。
最后,我们用img.save(path)保存图片再作为返回值返回即可。
#知识点:二维码生成,图片合成,图片处理,web前后端交互 #生成二维码函数,传入信息参数 #version为一个整数,范围1~40,作用表示二维码的大小 #error_correction容错率,挡出部分二维码还能识别,越高可以挡住部分越多,但数据量增加 #border 表示二维码距离图像外边框的距离 #globals 函数返回一个全局变量的字典,包括所有导入的变量。另外,工程里含有jquery.min.js以及animate.css两个文件就不粘代码了,一般来说大家都有,也可以在网上下载或者下载完整工程源码
为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前app的登录信息并将上面的session ID一并发给服务器,这样服务器收到了登录信息和sessionID后就可以确认两件事:一是用来确认登录的客户端的用户是验证过的;二是通过sessionID服务器知道将反馈结果推送到哪个网页。
所以针对第一点,我们的关键在于,在扫描前要确保用户是已经被验证过且合法的用户(验证方式可以是用户名+密码,也可以是一个secure key),在选择是否登录时将这个结果一并推送到服务器端,就好了。如果用户没有验证是否合法,可以像微信的处理方式一样直接告诉用户二维码不可识别或提示请先登录到app。
有了身份验证,那么现在就解决第二个问题,如何将反馈结果实时地显示在网页上呢?有朋友可能会说,客户端这边很简单发一个请求到后台就好了,而网页上用ajax定时发送到服务器端看是否有反馈。我不赞成这种做法,因为ajax轮询方式十分消耗客户端和服务器端资源!这里涉及到另一个技术-web实时推送技术,使用推送技术可以节约服务器端和客户端的资源,可以稳定地推送和接收任何消息。我在实现的过程中我采用了第三方推送服务-GoEasy推送,用它是实现非常简单,我们项目里的其他功能也用到了GoEasy web实时推送服务,所以在此我直接就用的GoEasy推送来将登录反馈结果推送到服务器。我的实现步骤非常简单,将传送的session ID作为客户端与网页端的通信channel,网页端订阅用session ID作为值得channel,客户端将验证结果和session ID发送到服务器端,服务器端可以通过这个channel主动将结果推送给网页版!如果客户端也需要做相应的反馈的话,那么客户端也只需要订阅这个channel,然后服务器端会同时将结果推送给网页版和客户端,收到消息后,就可以根据需求在goeasy的回调函数里做你想做的事情了。关于goeasy推送的使用,大家可以参考这篇博客:/jishaochengduo/articles/5552645.html,另外GoEasy推送官网上也有一个demo:GoEasy二维码扫码登录demo,大家可以去看看效果.
希望对大家有帮助,如有理解错误的地方,还请大家斧正。
研发VDI(桌面虚拟化平台)管理平台,包括服务器端后台功能设计、开发和修改,以及部分网页开发工作。
熟悉 Git 版本控制工具
独立分析问题和解决问题的能力
热爱本职工作,工作细心、责任心强,具有良好的团队合作精神和积极主动的沟通意识。
有B/S 和 C/S 混合架构设计开发经验
有分布式系统的设计经验