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

导读:本篇文章讲解 【Flask项目2】*用户注册和添加账户(10),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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')

测试
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74118.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!