注册
views.py
功能描述: 注册用户
请求路径: /passport/register
请求方式: POST
请求参数: mobile, sms_code,password
返回值: errno, errmsg
思路分析:
1.获取参数
2.校验参数,为空校验
3.通过手机号取出短信验证码
4.判断短信验证码是否过期
5.删除redis短信验证码
6.判断验证码正确性
7.创建用户对象
8.设置用户属性
9.保存到数据库
10.返回响应
#功能描述: 注册用户
# 请求路径: /passport/register
# 请求方式: POST
# 请求参数: mobile, sms_code,password
# 返回值: errno, errmsg
@passport_blu.route('/register', methods=['POST'])
def register():
"""
思路分析:
1.获取参数
2.校验参数,为空校验
3.通过手机号取出短信验证码
4.判断短信验证码是否过期
5.删除redis短信验证码
6.判断验证码正确性
7.创建用户对象
8.设置用户属性
9.保存到数据库
10.返回响应
:return:
"""
# 1.获取参数
# json_data = request.data
# dict_data = json.loads(json_data)
#上面两句话可以写成一句话,request.get_json()或者request.json
dict_data = request.json
mobile = dict_data.get('mobile')
sms_code = dict_data.get('sms_code')
password = dict_data.get('password')
# 2.校验参数,为空校验
if not all([mobile,sms_code,password]):
return jsonify(errno=RET.PARAMERR,errmsg="参数不全")
# 3.通过手机号取出短信验证码
try:
redis_sms_code = redis_store.get('sms_code:%s'%mobile)
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.DBERR,errmsg="获取短信验证码异常")
# 4.判断短信验证码是否过期
if not redis_sms_code:
return jsonify(errno=RET.NODATA,errmsg="短信验证码已过期")
# 5.删除redis短信验证码
try:
redis_store.delete('sms_code:%s'%mobile)
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.DBERR,errmsg="删除短信验证码异常")
# 6.判断验证码正确性
if sms_code != redis_sms_code:
return jsonify(errno=RET.DATAERR,errmsg="短信验证码错误")
# 7.创建用户对象
user = User()
# 8.设置用户属性
user.nick_name =mobile
# user.password_hash = password
user.password = password
user.mobile = mobile
# 9.保存到数据库
try:
db.session.add(user)
db.session.commit()
except Exception as e:
current_app.logger.error(e)
db.session.rollback()
return jsonify(errno=RET.DBERR,errmsg="用户注册失败")
# 10.返回响应
return jsonify(errno=RET.OK,errmsg="注册成功")
main.js注册前台
$(".register_form_con").submit(function (e) {
// 阻止默认提交操作,不让其往默认的action提交
e.preventDefault()
// 取到用户输入的内容
var mobile = $("#register_mobile").val()
var smscode = $("#smscode").val()
var password = $("#register_password").val()
if (!mobile) {
$("#register-mobile-err").show();
return;
}
if (!smscode) {
$("#register-sms-code-err").show();
return;
}
if (!password) {
$("#register-password-err").html("请填写密码!");
$("#register-password-err").show();
return;
}
if (password.length < 6) {
$("#register-password-err").html("密码长度不能少于6位");
$("#register-password-err").show();
return;
}
// 发起注册请求
//拼接请求参数
var params = {
"mobile":mobile,
"sms_code":smscode,
"password":password
}
$.ajax({
url:'/passport/register',
type:'post',
data:JSON.stringify(params),
contentType:'application/json',
headers:{'X-CSRFToken':getCookie('csrf_token')},
success: function (resp) {
//判断是否注册成功
if(resp.errno == '0'){
//重新加载当前页面
window.location.reload()
}else{
alert(resp.errmsg);
}
}
})
})
})
登录
views.py
功能描述
请求路径: /passport/login
请求方式: POST
请求参数: mobile,password
返回值: errno, errmsg
思路分析:
1.获取参数
2.校验参数
3.通过手机号获取用户对象
4.判断用户对象是否存在
5.判断密码是否正确
6.保存用户的登陆信息到session ?
7.返回响应
# 功能描述
# 请求路径: /passport/login
# 请求方式: POST
# 请求参数: mobile,password
# 返回值: errno, errmsg
@passport_blu.route('/login', methods=['POST'])
def login():
"""
思路分析:
1.获取参数
2.校验参数
3.通过手机号获取用户对象
4.判断用户对象是否存在
5.判断密码是否正确
6.保存用户的登陆信息到session ?
7.返回响应
:return:
"""
# 1.获取参数
mobile = request.json.get('mobile')
password = request.json.get('password')
# 2.校验参数
if not all([mobile,password]):
return jsonify(errno=RET.PARAMERR,errmsg="参数不全")
if not re.match('1[35789]\d{9}',mobile):
return jsonify(errno=RET.DATAERR,errmsg="手机号格式有误")
# 3.通过手机号获取用户对象
try:
user = User.query.filter(User.mobile == mobile).first()
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.DBERR,errmsg="查询用户异常")
# 4.判断用户对象是否存在
if not user:
return jsonify(errno=RET.NODATA,errmsg="该用户未注册")
# 5.判断密码是否正确
# if user.password_hash != password:
if not user.check_passowrd(password):
return jsonify(errno=RET.DATAERR,errmsg="密码错误")
# 6.保存用户的登陆信息到session
session['user_id'] = user.id
session['mobile'] = user.mobile
session['nick_name'] = user.nick_name
#用户最后登陆时间,当前系统时间
user.last_login = datetime.now()
# 7.返回响应
return jsonify(errno=RET.OK,errmsg="登陆成功")
main.js注册前台
// TODO 登录表单提交
$(".login_form_con").submit(function (e) {
e.preventDefault()
var mobile = $(".login_form #mobile").val()
var password = $(".login_form #password").val()
if (!mobile) {
$("#login-mobile-err").show();
return;
}
if (!password) {
$("#login-password-err").show();
return;
}
// 发起登录请求
// 拼接参数
var params = {
"mobile":mobile,
"password":password
}
$.ajax({
url:'/passport/login',
type:'post',
data:JSON.stringify(params),
contentType:'application/json',
headers:{'X-CSRFToken':getCookie('csrf_token')},
success: function (resp) {
//判断是否登陆成功
if(resp.errno == '0'){
window.location.reload()
}else{
alert(resp.errmsg);
}
}
})
})