实名认证功能主要为之后的发布房源功能做铺垫。且实名认证之后便不能在修改实名信息。
前端发起的局部刷新请求
对/user/auths/
发出get请求,得到后台返回的数据进行渲染到对应input框中,之后判断后台是否返回有效值,若有效则隐藏实名认证的按钮,并对input框设置不能修改的属性。若无效则不对前端进行操作,可有用户提交实名认证的请求,提交数据至后台。
$(document).ready(function(){
$.get('/user/auths/',function (data) {
$('#real-name').val(data.id_name);
$('#id-card').val(data.id_card);
if(data.id_name!=null && data.id_card!= '') {
$('.btn-success').hide();
$('#real-name').attr('disabled','disabled');
$('#id-card').attr('disabled','disabled');
}
});
$('#form-auth').submit(function (){
$.ajax({
url:'/user/auths/',
type:'put',
data:{
id_name:$('#real-name').val(),
id_card:$('#id-card').val()
},
dataType:'json',
success:function (data) {
if(data.code=='200'){
$('.btn-success').hide();
$('.error-msg').hide();
}else{
$('.error-msg').html('<i class="fa fa-exclamation-circle"></i>'+data.msg);
$('.error-msg').show();
}
}
});
});
})
后台进行的操作
对Ajax请求进行判断,若为GETt请求只需返回用户数据库中信息即可,若为PUT请求则获取前端传递的参数进行校验。校验无误后储存到数据库中即可。此处只是简单的对身份证做了一个数字位数的正则验证,仅供参考,实际中是使用不了的。
'''
展示实名认证的界面
'''
@user_blueprint.route('/auth/')
@is_login
def auth():
return render_template('auth.html')
'''
实名认证
'''
@user_blueprint.route('/auths/', methods=['GET', 'PUT'])
@is_login
def auth_info():
if request.method == 'GET':
"""
返回认证信息
"""
# 获取当前登录用户的编号
user_id = session['user_id']
# 根据编号查询当前用户
user = User.query.get(user_id)
# 返回用户的真实姓名、身份证号
return jsonify(user.to_auth_dict())
if request.method == 'PUT':
"""
处理认证请求
"""
id_name = request.form.get('id_name')
id_card = request.form.get('id_card')
# 验证参数完整性
if not all([id_card, id_name]):
return jsonify(status_code.PARAMS_ERROR)
# 验证身份证号合法
if not re.match(r'^[1-9]\d{17}$', id_card):
return jsonify(status_code.USER_REGISTER_AUTH_ERROR)
# 修改数据对象
try:
user = User.query.get(session['user_id'])
except:
return jsonify(status_code.DATABASE_ERROR)
try:
user.id_card = id_card
user.id_name = id_name
user.add_update()
except:
return jsonify(status_code.DATABASE_ERROR)
# 返回数据
return jsonify(status_code.SUCCESS)
网友评论