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))
示例#4
0
    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))