def post(self, request, method, phone_number, password, validation_code, invitation_code=None, icon=DEFAULT_ICON_URL, wechatid=None, nickname=None, gender=0, province=None, city=None): """注册,若成功返回用户令牌""" if method == 'phone': if User.objects.filter(phone_number=phone_number).count() > 0: abort(403, '用户已经注册') return elif method == 'wechat': if wechatid is None or nickname is None: abort(400, 'wechatid 或昵称不能为空') return # 防止绑定过微信的用户重复绑定 if User.objects.filter(wechat_id=wechatid).count() > 0: abort(403, '用户已经注册') return user = User.objects.filter(phone_number=phone_number).first() if user is not None: # 绑定已经使用手机号注册的账户 User.objects.filter(phone_number=phone_number).update( wechat_id=wechatid) return JsonResponse({'token': user.token}) else: abort(400) return if not UserValidationCode.verify(phone_number, validation_code): abort(400, '验证码错误') with transaction.atomic(): try: user = User(phone_number=phone_number, wechat_id=wechatid, city=city, province=province, gender=gender, icon=icon) user.set_password(password) user.generate_info(phone_number) user.save() code, desc = register_to_huanxin(phone_number, user.password, user.name) if code != 200: raise RuntimeError(desc) if invitation_code: self.__add_invited_users(request.user, invitation_code.split(',')) # 加积分 user.score += get_score_stage(3) user.score_records.create(score=get_score_stage(3), type="初始数据", description="首次手机号注册") return JsonResponse({'token': user.token}) except RuntimeError as e: print(e) abort(403, str(e) or '创建用户失败')