您的位置:首页 > 编程语言 > Python开发

【Tornado】| 扫码签到系统雏形及思路

2018-03-03 09:54 253 查看

0. 前言

环境: python3.6

模块: tornado

IDE工具: pycharm

1. 学习方法

不要过于追追根到底, 等到了一定阶段再去找原理;

python的库很多, 掌握常用的几个;

qrcode模块可以生成二维码图片, 基于PIL;

2. 项目思路

用户扫描二维码,跳转到一个用户签到页面;

用户签到页面, 用户填入正确信息,即可将签到信息存储到文件或者数据库;

用户签到页面, 用户填入信息不完整或者错误,跳转到错误页面;

3. 代码展示

3-1. 生成二维码

#!/usr/bin/env python
#coding:utf-8

"""
@Name: create_qr_code.py
@Author: lvah
@Date:3/1/18
@Connect: xc_guofan@163.com
@Desc:

"""

# 导入模块
import qrcode
import io

def get_code_by_str(text):
if not isinstance(text, str):
print  "请输入字符串参数....."
return  None
qr = qrcode.QRCode(
version=1,
box_size=10,
border=4,
)
qr.add_data(text)
qr.make(fit=True)

img = qr.make_image()
img_data = io.BytesIO()
img.save(img_data)
# print img_data.getvalue()
#  返回二维码的图片句柄;
return img_data

if __name__ == "__main__":
print get_code_by_str("猪肉")


3-2. 签到程序

#!/usr/bin/env python
#coding:utf-8

"""
@Name: sign_app.py
@Author: lvah
@Date:3/1/18
@Connect: xc_guofan@163.com
@Desc:

"""

from tornado import web, httpserver, ioloop
from create_qr_code import  get_code_by_str

SIGN_FILE_HANDLER = open('sign.csv', 'a')
SIGN_FILE_HANDLER.write('姓名,部门,编号\n')

# 部门, 逻辑处理模块;
class IndexPageHandler(web.RequestHandler):
def get(self, *args, **kwargs):
# self.write('welcome to learn python!')
self.render('index.html')

class CodePageHandler(web.RequestHandler):
def get(self, *args, **kwargs):
# 根据传入的字符串或者网址生成二维码句柄;
# img_handler = get_code_by_str("你好, 猪肉")
img_handler = get_code_by_str("http://localhost:8080/sign")
# 返回图片对象的内容
self.write(img_handler.getvalue())

# 用户签到处理模块;
class SignPageHandler(web.RequestHandler):
#  当用户请求为get时,跳转页面到签到页面;
def get(self, *args, **kwargs):
self.render("sign.html")
# 当用户请求为post时,对用户提交信息做验证,并存储签到信息到文件中;
def post(self, *args, **kwargs):
name = self.get_argument('name')
department = self.get_argument('department')
num = self.get_argument('num')
if name and department and num:
print name, department, num
# 将用户签到信息写入文件中;
SIGN_FILE_HANDLER.write('%s,%s,%s\n' %(name, department, num))
# 手动刷新, 将缓冲区内容写入的文件;
SIGN_FILE_HANDLER.flush()
self.write('签到成功!')
else:
self.write('请填写正确的签到信息!')

# 设置
settings = {
'template_path': 'templates',
'static_path':'statics'
}

# 分机号, 路由系统;
application = web.Application([
(r"/", IndexPageHandler),
(r"/get_code", CodePageHandler),
(r"/sign", SignPageHandler),
], **settings)

# socket服务器;
if __name__ == "__main__":
http_server = httpserver.HTTPServer(application)
http_server.listen(8080)
print "访问http://localhost:8080......."
ioloop.IOLoop.current().start()


3-3. 其他的html页面文件

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>python学习课堂</title>
</head>
<body>

<h1>签到</h1>
<img src="http://localhost:8080/get_code">
</body>
</html>


templates/sign.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>签到系统</title>
</head>
<body>
<h1>python学习请签到:</h1>

<form action="" method="post">
<p>姓名:<input type="text" name="name"></p>
<p>部门:<input type="text" name="department"></p>
<p>工号:<input type="text" name="num"></p>
<p><input type="submit" value="签到"> </p>
</form>
</body>
</html>


4. 效果图展示

4-1. 扫码后跳转到签到网页



4-2. 用户签到页面



- 签到成功页面



签到失败页面



5.总结

此处前端界面没有进行设计, 实现了基本的功能;

当然还有很多瑕疵,比如签到的这个部门应该选择数据库已有的部门进行选择;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息