【Flask项目2】*用户注册和添加账户(10)

financial—resource—user—user_resource
定义资源类,用户注册接口的实现

业务逻辑:

张三(我)——》邀请李四注册账户——》李四进行注册操作(输入用户名、密码、手机号、验证码、邀请码(非必填)),如果李四填写我的邀请码,邀请码在我的数据库user表的inviteId字段存储,需要去校验邀请码是否一致(张三数据库中的验证码==李四表单输入的验证码,通过校验)。注册成功后,张三的用户代金券加50,邀请用户+1;李四user表中增加了一条数据,并且创建了账户信息。

代码逻辑

class RegisterUser(Resource):
    def post(self):
        rq=reqparse.RequestParser()
        rq.add_argument('phone',required=True)
        rq.add_argument('username',required=True)
        rq.add_argument('password',required=True)
        rq.add_argument('code',required=True)
        rq.add_argument('invite_code',required=False)
        req=rq.parse_args()
        self.phone=req.phone
        self.username=req.username
        self.password=req.password
        self.code=req.code
        self.invite_code=req.invite_code
        user=User.query.filter(User.phone==self.phone).first()
        if user:
            current_app.logger.info('手机号已经存在')
            return {'message':'手机号已经存在'}
        user=User.query.filter(User.username==self.username).first()
        if user:
            current_app.logger.info('用户名已经存在')
            return {'message': '用户名已经存在'}

        real_code=fr.get('registerCode:{}'.format(self.phone))
        if not real_code or real_code.decode()!=self.code:
            current_app.logger.info('验证码错误')
            return {'message':'验证码错误'}


        user=User(username=self.username,pwd=self.password,phone=self.phone)

        #验证邀请码
        if self.invite_code:
            self.check_invite(user,invite_code)

        try:
            #需要用到数据库事务处理
            db.session.add(user)
            db.session.flush()      #todo 把数据插入的数据库的缓冲区(目的得到自增的id),并不是插入到数据库中
            #todo 创建账户对象,账户id和用户id是一一对应的
            account=Account(userId=user.id)
            db.session.add(account)
            db.session.commit()
            return {'msg':'success'}
        except Exception as e:
            current_app.logger.info(e)
            db.session.rollback()       #回滚操作
            return {'message': '用户注册时,插入数据库失败', 'code': 201}


    def check_invite(self,user,invite_code):
        code=invite_code.strip()
        invite_user=User.query.filter(User.inviteId==code).first() #用户输入的邀请码和邀请用户数据库中的邀请码比对
        if invite_user:
            user.invite_user_id=invite_user.id  #todo 2个用户关联下 invite_user.id:邀请用户的id(例:张三邀请李四,张三的id)
            invite_user.sumFriends+=1       #todo 张三的数据库中邀请用户+1
            invite_user.accountInfo.discount+=INVITE_MONEY  #todo 邀请用户(张三)的账户增加50元的代金券

加载资源类

from financial.resource.user.user_resource import *

user_api.add_resource(RegisterUser,'/user_register',endpoint='user_register')

测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值