Python及Django框架生成二维码的方法分析


Posted in Python onJanuary 31, 2018

本文实例讲述了Python及Django框架生成二维码的方法。分享给大家供大家参考,具体如下:

一、包的安装和简单使用

1.1 用Python来生成二维码很简单,可以看 qrcode 这个包:

pip install qrcode

qrcode 依赖 Image 这个包:

pip install Image

如果这个包安装有困难,可选纯Python的包来实现此功能,见下文。

1.2 安装后就可以使用了,这个程序带了一个 qr 命令:

qr 'http://www.ziqiangxuetang.com' > test.png

1.3 下面我们看一下如何在 代码 中使用

import qrcode
img = qrcode.make('http://www.tuweizhong.com')
# img <qrcode.image.pil.PilImage object at 0x1044ed9d0>
with open('test.png', 'wb') as f:
  img.save(f)

这样就可以生成一个带有网址的二维码,但是这样得把文件保存到硬盘中。

【备注】:纯Python的包的使用:

安装:

pip install git+git://github.com/ojii/pymaging.git#egg=pymaging
pip install git+git://github.com/ojii/pymaging-png.git#egg=pymaging-png

使用方法大致相同,命令行上:

qr --factory=pymaging "Some text" > test.png

Python中调用:

import qrcode
from qrcode.image.pure import PymagingImage
img = qrcode.make('Some data here', image_factory=PymagingImage)

二、Django 中使用

我们可以用 Django 直接把生成的内容返回到网页,以下是操作过程:

2.1 新建一个 zqxtqrcode 项目,tools 应用:

django-admin.py startproject zqxtqrcode
python manage.py startapp tools

2.2 将 tools 应用 添加到 项目 settings.py 中

INSTALLED_APPS = (
  ...
  'tools',
)

2.3 我们修改 tools/views.py

from django.http import HttpResponse
import qrcode
from cStringIO import StringIO
def generate_qrcode(request, data):
  img = qrcode.make(data)
  buf = StringIO()
  img.save(buf)
  image_stream = buf.getvalue()
  response = HttpResponse(image_stream, content_type="image/png")
  response['Last-Modified'] = 'Mon, 27 Apr 2015 02:05:03 GMT'
  response['Cache-Control'] = 'max-age=31536000'
  return response

上面对返回结果进行了处理,浏览器会缓存图片,提高再次加载的速度。Cache-Control 和 Last-Modified 不懂的可以看一下 HTTP协议 相关知识。

2.4 添加视图函数到 zqxtqrcode/urls.py

url(r'^qrcode/(.+)$', 'tools.views.generate_qrcode', name='qrcode'),

2.5 同步数据库,打开开发服务器:

python manage.py syncdb
python manage.py runserver

参考:https://pypi.python.org/pypi/qrcode/

Python 相关文章推荐
Python程序语言快速上手教程
Jul 18 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python实现多人聊天室
Mar 31 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
python标识符命名规范原理解析
Jan 10 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
python mock测试的示例
Oct 19 Python
python 如何读、写、解析CSV文件
Mar 03 Python
Python进阶之尾递归的用法实例
Jan 31 #Python
简单的python协同过滤程序实例代码
Jan 31 #Python
Python进阶之递归函数的用法及其示例
Jan 31 #Python
Python tkinter事件高级用法实例
Jan 31 #Python
pyqt5自定义信号实例解析
Jan 31 #Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 #Python
pyqt5简介及安装方法介绍
Jan 31 #Python
You might like
php 什么是PEAR?
2009/03/19 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
python对象与json相互转换的方法
2019/05/07 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
python调用私有属性的方法总结
2020/07/24 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
台湾家适得:Homeget
2019/02/11 全球购物
酒店司机岗位职责
2013/12/14 职场文书
高二地理教学反思
2014/01/24 职场文书
《燕子》教学反思
2014/02/18 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
合作协议书模板
2014/10/10 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
天河观后感
2015/06/11 职场文书
师德师风培训感言
2015/08/03 职场文书
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技