diff --git a/app/account_service.py b/app/account_service.py index a7ed0c4..b7872da 100644 --- a/app/account_service.py +++ b/app/account_service.py @@ -1,10 +1,10 @@ from flask import * from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password, WarningMessage - # 初始化蓝图 accountService = Blueprint("accountService", __name__) + ### Sign-up, login, logout ### @accountService.route("/signup", methods=['GET', 'POST']) def signup(): @@ -19,16 +19,44 @@ def signup(): # POST方法需判断是否注册成功,再根据结果返回不同的内容 username = escape(request.form['username']) password = escape(request.form['password']) - - #! 添加如下代码为了过滤注册时的非法字符 + + # ! 添加如下代码为了过滤注册时的非法字符 warn = WarningMessage(username) 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) - if not available: # 用户名不可用 - return jsonify({'status': '0'}) - else: # 添加账户信息 + if not available: # 用户名不可用 + 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: # 添加账户信息 add_user(username, password) verified = verify_user(username, password) if verified: @@ -43,7 +71,6 @@ def signup(): return jsonify({'status': '1'}) - @accountService.route("/login", methods=['GET', 'POST']) def login(): ''' @@ -102,9 +129,9 @@ def reset(): # POST请求用于提交修改后信息 old_password = escape(request.form['old-password']) new_password = escape(request.form['new-password']) - flag = change_password(username, old_password, new_password) # flag表示是否修改成功 + flag = change_password(username, old_password, new_password) # flag表示是否修改成功 if flag: session['logged_in'] = False - return jsonify({'status':'1'}) # 修改成功 + return jsonify({'status': '1'}) # 修改成功 else: - return jsonify({'status':'2'}) # 修改失败 + return jsonify({'status': '2'}) # 修改失败 diff --git a/app/bug.py b/app/bug.py new file mode 100644 index 0000000..556ba50 --- /dev/null +++ b/app/bug.py @@ -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()