flask项目:新闻信息网站4登录注册

注册

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);
                }

            }
        })

    })
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。