Skip to content

Commit e157fed

Browse files
committed
更严格的字符数限制,
增加一处异常的捕获, 使用 **args 参数
1 parent 1c5ac55 commit e157fed

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

main.py

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,16 @@ class Index(object):
5050
def GET(self):
5151
return render.index()
5252

53+
# TODO 返回具体错误信息
5354
class QR(object):
5455
"""处理传来的数据并显示 QR Code 二维码图片
5556
"""
5657
def handle_parameter(self, chl, chld, chs):
5758
"""处理表单提交的变量
5859
"""
5960
if len(chl) > 2953: # 最大容量
60-
chl = chl[:2952]
61+
# chl = chl[:2953]
62+
raise web.badrequest()
6163
# chl = ''
6264
chld = string.upper(chld) # 转换为大写字母
6365
# chld 是非必需参数,有默认值
@@ -117,24 +119,32 @@ def handle_parameter(self, chl, chld, chs):
117119
if len(chl) < i:
118120
version = l_max.index(i) + 1
119121
break
122+
else: # 如果超出了该纠错级别所能处理的最大字符数,抛出错误异常
123+
raise web.badrequest()
120124
error_correction = qrcode.constants.ERROR_CORRECT_L
121125
elif level == 'M':
122126
for i in m_max:
123127
if len(chl) < i:
124128
version = m_max.index(i) + 1
125129
break
130+
else:
131+
raise web.badrequest()
126132
error_correction = qrcode.constants.ERROR_CORRECT_M
127133
elif level == 'Q':
128134
for i in q_max:
129135
if len(chl) < i:
130136
version = q_max.index(i) + 1
131137
break
138+
else:
139+
raise web.badrequest()
132140
error_correction = qrcode.constants.ERROR_CORRECT_Q
133141
elif level == 'H':
134142
for i in h_max:
135143
if len(chl) < i:
136144
version = h_max.index(i) + 1
137145
break
146+
else:
147+
raise web.badrequest()
138148
error_correction = qrcode.constants.ERROR_CORRECT_H
139149
# print len(chl)
140150
# print version
@@ -151,22 +161,30 @@ def handle_parameter(self, chl, chld, chs):
151161
}
152162
return args
153163

154-
def show_image(self, version, error_correction, box_size, border,
155-
content, size):
164+
def show_image(self, **args):
156165
"""返回图片 MIME 及 内容,用于显示图片
157166
"""
167+
version = args['version']
168+
error_correction = args['error_correction']
169+
box_size = args['box_size']
170+
border = args['border']
171+
content = args['content']
172+
size = args['size']
158173
if box_size == 0:
159174
im = Image.new("1", (1, 1), "white") # 空白图片
160175
else:
161-
qr = qrcode.QRCode(
162-
version = version,
163-
error_correction = error_correction,
164-
box_size = box_size,
165-
border = border,
166-
)
167-
qr.add_data(content)
168-
qr.make(fit=True)
169-
im = qr.make_image()
176+
try: # 生成二维码
177+
qr = qrcode.QRCode(
178+
version = version,
179+
error_correction = error_correction,
180+
box_size = box_size,
181+
border = border,
182+
)
183+
qr.add_data(content)
184+
qr.make(fit=True)
185+
im = qr.make_image()
186+
except:
187+
raise web.internalerror()
170188
# im.show()
171189
# 由于没有文件 写 权限,所以将图片临时保存到内存
172190
img_name = StringIO.StringIO()
@@ -232,10 +250,7 @@ def GET(self):
232250
# print repr(chl)
233251
# TODO 如果编码不是 utf8,编码(quote())后重定向到 UTF8 编码后的链接
234252
args = self.handle_parameter(chl, chld, chs)
235-
MIME, data = self.show_image(args['version'],
236-
args['error_correction'],
237-
args['box_size'], args['border'],
238-
args['content'], args['size'])
253+
MIME, data = self.show_image(**args)
239254
web.header('Content-Type', MIME)
240255
return data
241256

@@ -251,10 +266,7 @@ def POST(self):
251266
return web.badrequest()
252267
chld = querys.chld
253268
args = self.handle_parameter(chl, chld, chs)
254-
MIME, data = self.show_image(args['version'],
255-
args['error_correction'],
256-
args['box_size'], args['border'],
257-
args['content'], args['size'])
269+
MIME, data = self.show_image(**args)
258270
web.header('Content-Type', MIME)
259271
return data
260272

templates/index.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<title>Online QR Code Generator</title>
88

99
<meta charset="utf-8" />
10-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1110
<meta name="description" content="Online QR Code Generator" />
1211
<link href="$site/static/favicon.ico" rel="shortcut icon" type="image/x-icon" />
1312
<style>

0 commit comments

Comments
 (0)