Compare commits
	
		
			1 Commits 
		
	
	
		
			master
			...
			Bug534-Wan
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
									
								
								 | 
						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