Refactor Wu Yuhan's code

Bug487-WuYuhan-Refactor
Hui Lan 2022-11-03 21:59:12 +08:00
parent bfd87c51f6
commit 286e884dd8
2 changed files with 38 additions and 13 deletions

View File

@ -1,4 +1,5 @@
import hashlib import hashlib
import string
from datetime import datetime from datetime import datetime
from UseSqlite import InsertQuery, RecordQuery from UseSqlite import InsertQuery, RecordQuery
@ -81,3 +82,35 @@ def md5(s):
''' '''
h = hashlib.md5(s.encode(encoding='utf-8')) h = hashlib.md5(s.encode(encoding='utf-8'))
return h.hexdigest() return h.hexdigest()
class UserName:
def __init__(self, username):
self.username = username
def validate(self):
if gen(self.username) > 20:
return f'{self.username} is too long. The user name cannot exceed 20 characters.'
if self.username.startswith('.'): # a user name must not start with a dot
return 'Period (.) is not allowed as the first letter in the user name.'
if ' ' in self.username: # a user must not include a whitespace
return 'Whitespace is not allowed in the user name.'
for c in self.username: # a user name not include special characters
if c in string.punctuation and c is not '.' and c is not '_':
return f'{c} is not allowed in the user name.'
return 'OK'
class WarningMessage:
def __init__(self, s):
self.s = s
def __str__(self):
result = UserName(self.s).validate()
if result != 'OK'
return result
if self.s in ['signup', 'login', 'logout', 'reset', 'mark', 'back', 'unfamiliar', 'familiar', 'del']:
return 'You used a restricted word as the username. Please come up with a better one.'
return 'OK'

View File

@ -1,5 +1,5 @@
from flask import * from flask import *
from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password, UserName, WarningMessage
import re import re
# 初始化蓝图 # 初始化蓝图
@ -22,17 +22,9 @@ def signup():
password = escape(request.form['password']) password = escape(request.form['password'])
#! 添加如下代码为了过滤注册时的非法字符 #! 添加如下代码为了过滤注册时的非法字符
if len(username) > 20: warn = WarningMessage(username)
return '用户名过长' if warn != 'OK':
# 正则匹配非法字符 return str(warn)
check_useful = re.search(u'^[_a-zA-Z0-9\u4e00-\u9fa5]+$', username)
if not check_useful:
return '存在非法字符'
# 判断用户名是否和接口重名
if username in ["signup", "login", "logout",
"reset", "mark", "back",
"unfamiliar", "familiar", 'del']:
return '请勿与接口同名'
available = check_username_availability(username) available = check_username_availability(username)
if not available: # 用户名不可用 if not available: # 用户名不可用