Flask项目(新闻网站)—— 注册功能

本文详细讲解了如何通过Python Flask框架实现注册功能,包括参数校验、手机号合法性检查、数据库查询用户是否存在、短信验证码验证,以及用户信息的加密和状态保持。涵盖了前端提交数据、后端视图处理和数据库操作的关键步骤。
摘要由CSDN通过智能技术生成

在经过前期的项目配置,我们可以实现项目的功能了

注册功能

注册接口设计

在这里插入图片描述

功能分析

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

至此,注册功能实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值