WIP: Bug534-WangWeitao #173
|
@ -1,10 +1,10 @@
|
||||||
from flask import *
|
from flask import *
|
||||||
from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password, WarningMessage
|
from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password, WarningMessage
|
||||||
|
|
||||||
|
|
||||||
# 初始化蓝图
|
# 初始化蓝图
|
||||||
accountService = Blueprint("accountService", __name__)
|
accountService = Blueprint("accountService", __name__)
|
||||||
|
|
||||||
|
|
||||||
### Sign-up, login, logout ###
|
### Sign-up, login, logout ###
|
||||||
@accountService.route("/signup", methods=['GET', 'POST'])
|
@accountService.route("/signup", methods=['GET', 'POST'])
|
||||||
def signup():
|
def signup():
|
||||||
|
@ -20,14 +20,42 @@ def signup():
|
||||||
username = escape(request.form['username'])
|
username = escape(request.form['username'])
|
||||||
password = escape(request.form['password'])
|
password = escape(request.form['password'])
|
||||||
|
|
||||||
#! 添加如下代码为了过滤注册时的非法字符
|
# ! 添加如下代码为了过滤注册时的非法字符
|
||||||
warn = WarningMessage(username)
|
warn = WarningMessage(username)
|
||||||
if str(warn) != 'OK':
|
if str(warn) != 'OK':
|
||||||
return jsonify({'status': '3', 'warn': str(warn)})
|
return str(warn)
|
||||||
|
# return jsonify({'status': '3', 'warn': str(warn)})
|
||||||
|
|
||||||
available = check_username_availability(username)
|
available = check_username_availability(username)
|
||||||
if not available: # 用户名不可用
|
if not available: # 用户名不可用
|
||||||
return jsonify({'status': '0'})
|
flash('用户名 %s 已经被注册。' % (username))
|
||||||
|
return render_template('signup.html')
|
||||||
|
elif len(password.strip()) < 8: # 密码过短
|
||||||
|
return '密码少于8位。'
|
||||||
|
# return jsonify({'status': '0'})
|
||||||
|
|
||||||
|
has_specialchar = False
|
||||||
|
specialchar_list = ['+', '-', '*', '/', '_', '&', '%', ',']
|
||||||
|
for c in password.strip():
|
||||||
|
if c in specialchar_list:
|
||||||
|
has_specialchar = True
|
||||||
|
break
|
||||||
|
if not has_specialchar:
|
||||||
|
return '密码必须包含特殊字符'
|
||||||
|
|
||||||
|
has_upper_letter = False
|
||||||
|
has_lower_letter = False
|
||||||
|
for c in password.strip():
|
||||||
|
if c.isupper():
|
||||||
|
has_upper_letter = True
|
||||||
|
elif c.islower():
|
||||||
|
has_lower_letter = True
|
||||||
|
has_both_letter = has_upper_letter and has_lower_letter
|
||||||
|
if has_both_letter:
|
||||||
|
break
|
||||||
|
if not has_both_letter:
|
||||||
|
return '密码必须同时包含大写字母和小写字母'
|
||||||
|
|
||||||
else: # 添加账户信息
|
else: # 添加账户信息
|
||||||
add_user(username, password)
|
add_user(username, password)
|
||||||
verified = verify_user(username, password)
|
verified = verify_user(username, password)
|
||||||
|
@ -43,7 +71,6 @@ def signup():
|
||||||
return jsonify({'status': '1'})
|
return jsonify({'status': '1'})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@accountService.route("/login", methods=['GET', 'POST'])
|
@accountService.route("/login", methods=['GET', 'POST'])
|
||||||
def login():
|
def login():
|
||||||
'''
|
'''
|
||||||
|
@ -105,6 +132,6 @@ def reset():
|
||||||
flag = change_password(username, old_password, new_password) # flag表示是否修改成功
|
flag = change_password(username, old_password, new_password) # flag表示是否修改成功
|
||||||
if flag:
|
if flag:
|
||||||
session['logged_in'] = False
|
session['logged_in'] = False
|
||||||
return jsonify({'status':'1'}) # 修改成功
|
return jsonify({'status': '1'}) # 修改成功
|
||||||
else:
|
else:
|
||||||
return jsonify({'status':'2'}) # 修改失败
|
return jsonify({'status': '2'}) # 修改失败
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
from random import randint
|
||||||
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_color():
|
||||||
|
# 随机颜色RGB
|
||||||
|
return randint(120, 200), randint(120, 200), randint(120, 200)
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_code():
|
||||||
|
# 随机字符
|
||||||
|
codes = [[chr(i) for i in range(48, 58)], [chr(i) for i in range(65, 91)], [chr(i) for i in range(97, 123)]]
|
||||||
|
codes = codes[randint(0, 2)]
|
||||||
|
return codes[randint(0, len(codes)-1)]
|
||||||
|
|
||||||
|
|
||||||
|
def generate_captcha(width=140, height=60, length=4):
|
||||||
|
# 生成验证码
|
||||||
|
img = Image.new("RGB", (width, height), (250, 250, 250))
|
||||||
|
draw = ImageDraw.Draw(img)
|
||||||
|
font = ImageFont.truetype("static/font/font.ttf", size=36)
|
||||||
|
# 验证码文本
|
||||||
|
text = ""
|
||||||
|
for i in range(length):
|
||||||
|
c = get_random_code()
|
||||||
|
text += c
|
||||||
|
|
||||||
|
rand_len = randint(-5, 5)
|
||||||
|
draw.text((width * 0.2 * (i+1) + rand_len, height * 0.2 + rand_len), c, font=font, fill=get_random_color())
|
||||||
|
# 加入干扰线
|
||||||
|
for i in range(3):
|
||||||
|
x1 = randint(0, width)
|
||||||
|
y1 = randint(0, height)
|
||||||
|
x2 = randint(0, width)
|
||||||
|
y2 = randint(0, height)
|
||||||
|
draw.line((x1, y1, x2, y2), fill=get_random_color())
|
||||||
|
# 加入干扰点
|
||||||
|
for i in range(16):
|
||||||
|
draw.point((randint(0, width), randint(0, height)), fill=get_random_color())
|
||||||
|
# 保存图片
|
||||||
|
img.save("static/captcha/" + text + ".jpg")
|
||||||
|
return text + ".jpg"
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
for i in range(1000):
|
||||||
|
generate_captcha()
|
Loading…
Reference in New Issue