def post(self, request, *args, **kwargs): """ 发起借钱请求, 需要三个字段(向谁借who, 借多少money,什么时候还pay_back_date) """ need_fields = ('who', 'money', 'pay_back_date') for field in need_fields: if not request.POST.get(field): return JsonResponse(response_detail(400, f"{field}缺失")) who = int(request.POST.get('who')) money = int(request.POST.get('money')) pay_back_date = str(request.POST.get('pay_back_date')) try: who = User.objects.get(id=who) except: return JsonResponse(response_detail(400, "请求失败!用户不存在!")) if money < 0: return JsonResponse(response_detail(400, "请求失败!金额应该大于0")) try: field_time = datetime.strptime(pay_back_date, '%Y-%m-%d') except ValueError: return JsonResponse(response_detail(400, '时间格式有误,应为 %Y-%m-%d')) borrow_field = BorrowMoneyTable(borrower=request.user, lender=who, money=money, repayment_date=field_time, status=0) borrow_field.save() send_message( request.user, who, "借钱信息", f"{request.user.username} 想向你借 {money}" f"块钱,还款时间是: {field_time}, 是否同意?\n记录号:【{borrow_field.id}】", 3) return JsonResponse(response_detail(200))
def put(request, *args, **kwargs): """ 家长审核请求加入的成员 1. 检查put过来的数据中有没有(家庭id,成员id,时间,是否同意) 2. 如果同意,发消息给成员(0同意,1不同意) 3. 加入家庭表 4. 不同意法消息给成员 TODO: 校验请求时间也先不写了,命没了 TODO: 目前是明文传输,前端需要加密(添加校验字段),后端解密 """ member_list = ['members3', 'members4', 'members5', 'members6', 'members7', 'members8'] need_fields = ['parent_id', 'user_id', 'is_agree'] PUT = QueryDict(request.body) put_data = PUT.dict() for field in need_fields: if not put_data.get(field): return JsonResponse(response_detail(400, "您传递的数据不符合接口要求")) if field == 'is_agree': if put_data.get(field) not in ['0', '1']: return JsonResponse(response_detail(400, "您只能选择同意或不同意")) child = User.objects.get(id=int(put_data.get('user_id'))) # 根据家长ID找到家庭 try: fm = User.objects.filter(id=int(put_data.get('parent_id'))).first().family1.family_member except TypeError: # 正常从前端界面发请求不会触发 return JsonResponse(response_detail(400, "没有这个家庭")) the_family = User.objects.get(id=int(put_data.get('parent_id'))).family1 if put_data.get('is_agree') == '1': send_message(request.user, child, "申请失败", f"{request.user.username} 不同意你加入家庭{the_family.family_name}.", 1) return JsonResponse(response_detail(200)) get_application = Application.objects.filter(applicant=child, interviewer=request.user).first() if not get_application: return JsonResponse(response_detail(400, "该用户从来没发起过请求")) for m in member_list: m_value = getattr(fm, m) # 将家庭加入到成员家庭项目中 if child.family1: return JsonResponse(response_detail(460, "只能加入一个家庭")) # 将新成员加入到家庭成员表中 # TODO:判断新成员是不是在家庭中了 if m_value is None: setattr(fm, m, child) fm.save() child.family1 = the_family child.save() send_message(request.user, child, "加入成功", f"{request.user.username} 同意你加入家庭{the_family.family_name}.", 1) get_application.delete() return JsonResponse(response_detail(200))
def put(self, request): """ 处理借钱请求,需要两个字段(是否同意【is_agree】 1代表不同意, 0代表同意, 借钱记录号【borrow_id】) """ need_fields = ('is_agree', 'borrow_id') PUT = QueryDict(request.body) put_data = PUT.dict() for field in need_fields: if not put_data.get(field): return JsonResponse(response_detail(400, f"{field}缺失!")) is_agree = int(put_data['is_agree']) borrow_id = int(put_data['borrow_id']) if is_agree not in (0, 1): return JsonResponse(response_detail(400, "参数错误!")) try: borrow_field = BorrowMoneyTable.objects.filter( id=borrow_id).first() except: return JsonResponse(response_detail(400, "记录不存在或过期!")) if not borrow_field: return JsonResponse(response_detail(400, '请求不存在')) if borrow_field.status != 0: return JsonResponse(response_detail(400, "已处理")) if is_agree == 1: send_message(request.user, borrow_field.borrower, "借款申请结果", f"{request.user.username} 不同意您的借款申请", 1) borrow_field.delete() return JsonResponse(response_detail(200)) send_message(request.user, borrow_field.borrower, "借款申请结果", f"{request.user.username} 同意了您的借款申请", 1) bill_lender = UserBills( user=request.user, money=borrow_field.money, type=10, concrete_type="外借", remarks=f"{borrow_field.date} 借给 {borrow_field.borrower.username}," f" 还款日期: {borrow_field.repayment_date}") bill_lender.save() bill_borrower = UserBills( user=borrow_field.borrower, money=borrow_field.money, type=0, concrete_type="借款", remarks=f"{borrow_field.date} 向 {borrow_field.lender.username} 借的。" f"还款日期: {borrow_field.repayment_date}") bill_borrower.save() borrow_field.status = 1 borrow_field.save() return JsonResponse(response_detail(200))
def _notify_all_parents(self, request, family_mumber): """ 有请求加入家庭的消息时通知家长,并储存请求信息 :param request: Request,主要用来获取认证用户身份 :param family_mumber: QuerySet,主要用来获得家长信息 """ # TODO : 请求信息目前没有时间限制,需要解决,请求最多保持一天 for parent in [family_mumber.parent1, family_mumber.parent2]: if parent is not None: send_message( request.user, family_mumber.parent1, "加入家庭请求", f"{request.user.username} (id = {request.user.id}) 请求加入您的家庭, 是否同意?", 2) new_application = Application( applicant=request.user, interviewer=family_mumber.parent1) new_application.save()
def post(self, request, *args, **kwargs): need_fields = ('who', 'money', 'bill_id') for field in need_fields: if not request.POST.get(field): return JsonResponse(response_detail(400, f"{field} 缺失!")) who_id = int(request.POST.get('who')) money = int(request.POST.get('money')) bill_id = int(request.POST.get('bill_id')) who = User.objects.filter(id=who_id).first() if not who: return JsonResponse(response_detail(400, "用户不存在!")) if money <= 0: return JsonResponse(response_detail(400, "还款金额不能小于等于0")) # 校验通过后,首先删除或修改借还款数据表中的内容,添加双方账单,再给用户发消息 borrow_bill = BorrowMoneyTable.objects.filter( borrower=request.user, lender=who, id=bill_id).order_by('-money').first() if not borrow_bill: return JsonResponse(response_detail(400, "借款记录不存在")) if borrow_bill.money < money: return JsonResponse(response_detail(400, "金额超过欠账金额!")) # TODO:一次性还清所有帐 borrow_bill.money -= money if borrow_bill.money == 0: borrow_bill.delete() else: borrow_bill.save() bill_borrower = UserBills(user=request.user, money=money, type=10, concrete_type="还款", remarks=f"给{who.username} 还款!") bill_borrower.save() bill_lender = UserBills(user=who, money=money, type=0, concrete_type="借款收回", remarks=f"来自{request.user}的还款") bill_lender.save() send_message(request.user, who, "还钱啦", f"欠你的钱给你还了啊!金额:{money}元", 0) return JsonResponse(response_detail(200))