forked from mrlan/EnglishPal
parent
8cbc7c9a0c
commit
de392ddc5a
|
@ -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():
|
||||||
|
@ -23,11 +23,39 @@ def signup():
|
||||||
# ! 添加如下代码为了过滤注册时的非法字符
|
# ! 添加如下代码为了过滤注册时的非法字符
|
||||||
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():
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -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