在经过前期的项目配置,我们可以实现项目的功能了
注册功能
注册接口设计
功能分析
1.接受参数
2.校验参数
2.1 参数是否齐全
2.2 手机号是否合法
2.3 手机号是否注册
# 从数据库User表中查找是否已存在
#如果数据存在,提示已存在
#如果数据不存在,实现注册功能(往表中添加数据)
2.4 短信验证码是否正确(数据存在于Redis)
#先从Redis库中获取到我们存放的验证码,在进行对比
3.实例化用户信息
#其中User表中的password_hash字段,是加密后的数据
#采用@property(静态属性),实现密码数据加密
4.实现状态保持(session)
5.返回数据
代码实现
views.py
@passport_blue.route('/register', methods=['POST'])
def register():
"""
注册功能
1.接受参数
2.校验参数
2.1 参数是否齐全
2.2 手机号是否合法
2.3 手机号是否注册
2.4 短信验证码是否正确
3.实例化用户信息
4.实现状态保持
5.返回数据
:return:
"""
# 1.接受参数
mobile = request.json.get('mobile')
smscode = request.json.get('smscode')
password = request.json.get('password')
# 2.校验参数
# 2.1 参数是否齐全
if not all([mobile, smscode, password]):
return jsonify(errno=RET.PARAMERR, errmsg='缺失参数')
# 2.2 手机号是否合法
if not re.findall('^1[3456789]\d{9}$', mobile):
return jsonify(errno=RET.PARAMERR, errmsg='缺失参数')
# 2.3 手机号是否注册
try:
user = User.query.filter_by(mobile=mobile).first()
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.DBERR, errmsg='数据库查询错误')
if user:
return jsonify(errno=RET.DATAEXIST, errmsg='该用户已注册')
# 2.4 短信验证码是否正确
if not smscode == sr.get("SMS:" + mobile):
return jsonify(errno=RET.PARAMERR, errmsg='验证码错误')
# 3.实例化用户信息
new_user = User()
new_user.nick_name = mobile
new_user.mobile = mobile
new_user.password=password
new_user.create_time = datetime.now()
db.session.add(new_user)
try:
db.session.commit()
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.DBERR, errmsg='用户保存失败')
# 4.实现状态保持
session['id'] = new_user.id
session['nick_name'] = new_user.nick_name
session['moblie'] = new_user.mobile
# 5.返回数据
return jsonify(errno=RET.OK, errmsg='注册成功')
models.py
找到User模型类,在类中的尾部,添加如下代码
@property
def password(self):
return AttributeError('you cont read!')
@password.setter
def password(self, value):
self.password_hash = generate_password_hash(value)
在此,我们后端的逻辑代码已实现了,但要注册功能还没彻底实现,我们还需要在前端给他实现(注册)的提交事件
main.js
在此文件中,找到“发送注册请求”,这段注释处,添加如下代码
// 发起注册请求
var params = {
'mobile':mobile,
'smscode':smscode,
'password':password
};
$.ajax({
url:'/passport/register', // 请求地址
type:'post', // 请求方法
data:JSON.stringify(params), // 请求参数
contentType:'application/json',
headers:{'X-CSRFToken':getCookie('csrf_token')}, // 在请求头中带上csrf_token
success:function (response) {
if (response.errno == '0') {
// 注册成功
location.reload();
} else {
alert(response.errmsg);
}
}
});
至此,注册功能实现