注册注意要点:
登录注意要点
登出注意要点
页面访问注意要点
Flask-login的注意要点
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
用户数据安全性
个人页面的Ajax异步数据交互注意要点
加盐可以防止破解,使得数据库的密码为加密过后的字符串,防止数据库信息丢失导致个人信息丢失冒用,一般不能轻易的被破解:
@app.route('/reg', methods={'post', 'get'})
def reg():
# request arg
# request form
username = request.values.get('username').strip()
password = request.values.get('password').strip()
# 对数据进行检验
if username == '' or password == '':
return redirect_with_msg('/regloginpage', u'用户名或者密码为空!', 'reglogin')
# 如果用户名已经存在,跳转到首页显示对应的信息
user = User.query.filter_by(username=username).first()
if user != None:
return redirect_with_msg('/regloginpage', u'用户名已经存在!', 'reglogin')
# 安全加盐
salt = ''.join(random.sample('0123456789abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 10))
m = hashlib.md5()
m.update((password + salt).encode("utf-8")) # 使用摘要算法加盐密码, python3里面要先encode进行编码
password = m.hexdigest()
user = User(username, password, salt)
# 提交数据
db.session.add(user)
db.session.commit()
# 直接设置注册用户为登录状态,不必跳转到登录页面注册,使用的是flask-login的登录模块
login_user(user)
next = request.values.get('next')
# 因为跳转到注册页面的时候如果之前浏览过页面会出现斜杠数目大于0的情况
if next != None and next.startswith('/') > 0:
return redirect(next)
return redirect('/')
可以有效防止破解,逻辑和注册答题类似:
@app.route('/login', methods={'post', 'get'})
def login():
username = request.values.get('username').strip()
password = request.values.get('password').strip()
# 验证数据
if username == '' or password == '':
return redirect_with_msg('/regloginpage', u'用户名或者密码为空!', 'reglogin')
# 验证用户是否为空
user = User.query.filter_by(username=username).first()
if user == None:
return redirect_with_msg('/regloginpage', u'用户名不存在!', 'reglogin')
m = hashlib.md5()
m.update((password + user.salt).encode("utf-8"))
if m.hexdigest() != user.password:
return redirect_with_msg('/regloginpage', u'用户名或者密码不正确!', 'reglogin')
# 否则登录成功
login_user(user)
next = request.values.get('next')
# 因为跳转到注册页面的时候如果之前浏览过页面会出现斜杠数目大于0的情况
if next != None and next.startswith('/') > 0:
# 直接跳转到想要点开的页面,是用户体验优化的做法之一
return redirect(next)
return redirect('/')
本文档代码和项目URL:
https://github.com/too-hoo/myinstagram/blob/master/myinstagram/views.py