Exemple #1
0
 def create(self, request, *args, **kwargs):
     '''
     发表帖子
     '''
     data = request.data.copy()
     try:
         type_id = data.get('type_id')
         type_obj = PostType.objects.get(pk=int(type_id))
         yonghu_obj = self.get_person(request)
     except KeyError:
         return Response(ReturnCode(1, msg='object do not exists.'))
     try:
         post = Post()
         post.title = data.get('title')
         post.content = data.get('content')
         post.type = type_obj
         post.yonghu = yonghu_obj
         post.save()
         ct = ContentType.objects.get_for_model(post)
         imagePaths = self.get_image_path(request)
         for imagePath in imagePaths:
             img_path_obj = ImagePath()
             img_path_obj.content_type = ct
             img_path_obj.object_id = post.pk
             img_path_obj.imgPath = imagePath
             img_path_obj.save()
         serializer = PostSerializer(post)
         return Response(ReturnCode(0, data=serializer.data))
     except exceptions.FieldError:
         return Response(ReturnCode(1, msg='field error.'))
Exemple #2
0
 def create(self, request, *args, **kwargs):
     try:
         yonghu_obj = self.get_person(request)
     except KeyError:
         return Response(ReturnCode(1, msg='not login.'))
     title = request.data.get('title')
     content = request.data.get('content')
     status = 0
     # 图片,前端这里用json序列化image数组
     imagePaths = self.get_image_path(request)
     try:
         feedback_obj = Feedback()
         feedback_obj.title = title
         feedback_obj.content = content
         feedback_obj.status = status
         feedback_obj.yonghu = yonghu_obj
         feedback_obj.save()
         feedback = ContentType.objects.get_for_model(feedback_obj)
         for imagepath in imagePaths:
             imgPath_obj = ImagePath()
             imgPath_obj.imgPath = imagepath
             imgPath_obj.content_type = feedback
             imgPath_obj.object_id = feedback_obj.pk
             imgPath_obj.save()
         serializer = FeedbackSerializer(feedback_obj)
         return Response(ReturnCode(0, data=serializer.data))
     except Exception as e:
         print(e)
         return Response(ReturnCode(1, msg='field error.'))
Exemple #3
0
 def update(self, request, *args, **kwargs):
     '''
     用户身份认证
     :param request:
     :param args:
     :param kwargs:
     :return:
     '''
     user = self.get_object()
     serializer = YonghuSerializer(user)
     # 未验证
     if not user.is_auth_new:
         # user = request.user.pk
         UserName = request.data.get('UserName')
         Password = request.data.get('Password')
         usclogin = UscLogin(UserName, Password)
         if usclogin.UscLoginNew():
             newuscinfo = NewUSCINFO()
             newuscinfo.UserName = UserName
             newuscinfo.Password = Password
             newuscinfo.user = user
             newuscinfo.save()
             user.is_auth_new = True
             user.save()
             return Response(ReturnCode(0, data=serializer.data),
                             status=200)
         else:
             return Response(ReturnCode(1, msg='登录失败'), status=400)
     else:
         return Response(ReturnCode(1, msg='请勿重复验证'),
                         status=status.HTTP_400_BAD_REQUEST)
Exemple #4
0
 def update(self, request, *args, **kwargs):
     '''
     用户身份认证
     :param request:
     :param args:
     :param kwargs:
     :return:
     '''
     user = self.get_object()
     serializer = YonghuSerializer(user)
     # 未验证
     if not user.is_auth:
         # user = request.user.pk
         UserName = request.data.get('UserName')
         Password = request.data.get('Password')
         university = UniversityLogin()
         if university.UscLogin(UserName, Password):
             uscinfo = UscInfo()
             uscinfo.UserName = UserName
             uscinfo.Password = Password
             uscinfo.user = user
             uscinfo.save()
             user.is_auth = True
             user.save()
             return Response(ReturnCode(0, data=serializer.data),
                             status=200)
         else:
             return Response(ReturnCode(1, msg='登录失败'), status=400)
     else:
         return Response(ReturnCode(1, msg='请勿重复验证'),
                         status=status.HTTP_400_BAD_REQUEST)
Exemple #5
0
 def get_queryset(self):
     try:
         yonghu_obj = self.get_person(self.request)
     except KeyError:
         return Response(ReturnCode(1, msg='must login.'), status=400)
     post_obj = yonghu_obj.post.all()
     serializer = PostSerializer(post_obj, many=True)
     return Response(ReturnCode(0, data=serializer.data))
Exemple #6
0
 def list(self, request, *args, **kwargs):
     try:
         yonghu_obj = self.get_person(request)
     except KeyError:
         return Response(ReturnCode(1, msg='not login.'))
     feedbacks = yonghu_obj.feedbacks.all()
     serializers = FeedbackSerializer(feedbacks, many=True)
     return Response(ReturnCode(0, data=serializers.data))
Exemple #7
0
        def like_record(self, request):
            yonghu = request.yonghu
            content_type = request.GET.get('content_type')
            object_id = request.GET.get('object_id')
            is_liked = request.GET.get('is_liked')
            content_type = ContentType.objects.get(model=content_type)

            if is_liked == True:
                like_detail, created = LikeDetail.objects.get_or_create(
                    content_type, object_id=object_id, yonghu=yonghu)
                #准备进行点赞
                if created:
                    #可以点赞
                    likes, created = Likes.objects.get_or_create(
                        content_type, object_id=object_id)
                    obj = self.get_object()
                    ct = ContentType.objects.get_for_model(obj)
                    sid = transaction.savepoint()
                    num = 0
                    while num < 3:
                        like_num = obj.like_num
                        likes_obj = Likes()
                        likes_obj.content_type = ct
                        likes_obj.object_id = obj.pk
                        likes.like_num += 1
                        likes.save()
                        like_num_new = obj.like_num
                        if like_num == like_num_new - 1:
                            return True
                        else:
                            num += 1
                            transaction.savepoint_rollback(sid)
                        return False
                        return Response(ReturnCode(0))
                    else:
                        return Response(ReturnCode(1, msg='already liked it'))
                else:
                    #准备取消点赞
                    if LikeDetail.objects.filter(content_type,
                                                 object_id=object_id,
                                                 yonghu=yonghu).exist():
                        like_detail = LikeDetail.objects.get(
                            content_type, object_id=object_id, yonghu=yonghu)
                        like_detail.delete()
                        likes, created = Likes.objects.get_or_create(
                            content_type, object_id=object_id)
                        likes.like_num -= 1
                        likes.save()
                        return Response(ReturnCode(0))
                    else:
                        return Response(ReturnCode(1, msg='does not exist'))
Exemple #8
0
 def list(self, request, *args, **kwargs):
     '''
     列出指定用户发布的商品信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     '''
     try:
         yonghu_obj = self.get_person(request)
     except KeyError:
         return Response(ReturnCode(1, msg='must login.'), status=400)
     commody_obj = yonghu_obj.commody.filter(is_delete=False, is_end=False)
     serializer = CommodySerializer(commody_obj, many=True)
     return Response(ReturnCode(0, data=serializer.data))
Exemple #9
0
def getTimetable(request):
    '''
    新系统课表接口
    :param request:
    :return:
    '''
    openid = request.data.get('openid')
    assert openid is not None, 'openid is None'
    print(openid)
    user = Yonghu.objects.get(pk=openid)
    if user.is_auth_new:
        uscNew = user.uscNew
        result = NewTimetable(uscNew.UserName, uscNew.Password).run()
        return Response(ReturnCode(0, data=result))
    else:
        return Response(ReturnCode(1, msg='身份未认证'))
Exemple #10
0
def timeTable(request):
    '''
    老系统课表接口,停止维护
    :param request:
    :return:
    '''
    timename = request.query_params.get('TimeName')
    openid = request.query_params.get('openid')
    print(timename)
    user = Yonghu.objects.get(pk=openid)
    print(user)
    if user.is_auth:
        usc = user.usc
        result = Timetable.USC_Timetable(usc.UserName, usc.Password, timename)
        return Response(ReturnCode(0, data=result))
    else:
        return Response(ReturnCode(1, msg='账号身份未认证'))
Exemple #11
0
def logout_view(request):
    '''
    用户注销登录
    :param request:
    :return:
    '''
    request.session.clear()
    return Response(ReturnCode(0), status=status.HTTP_200_OK)
Exemple #12
0
def check_score(request):
    '''
    查询成绩
    :param request:
    :return:
    '''
    try:
        yonghu_obj = GetPersonal().get_person(request)
    except KeyError:
        return Response(ReturnCode(1, msg='not login.'), status=400)
    if yonghu_obj.is_auth_new:
        usc_new_info = yonghu_obj.uscNew
        result = Usc(usc_new_info.UserName,
                     usc_new_info.Password).check_score(request.data)
        return Response(ReturnCode(0, data=result))
    else:
        return Response(ReturnCode(1, msg='身份未认证'))
Exemple #13
0
def qq_login(request):
    '''
    QQ登录
    :param request:
    :return:
    '''
    code = request.data.get('code')
    # print(type(code))
    userInfo = request.data.get('userInfo')
    if type(code) != type('str'):
        # print('运行')
        return Response(ReturnCode(1, msg="code出错"),
                        status=status.HTTP_400_BAD_REQUEST)
    else:
        res = code2Session.c2s(settings.QQ_APPID, code)
        # print(res)
        if res.get('errcode') == 0:
            openid = res.get('openid')
            # print('openid: ', openid)
            userInfo['openid'] = openid
            user = Yonghu.objects.filter(openid=openid)
            # print(userInfo)
            ### 不存在,重新创建
            if len(user) == 0:
                serializer = YonghuSerializer(data=userInfo)
                print(serializer.is_valid())
                if serializer.is_valid():
                    serializer.save()
                else:
                    return Response(ReturnCode(1, msg=serializer.errors),
                                    status=400)
            ### 存在,修改
            else:
                serializer = YonghuSerializer(user[0], data=userInfo)
                if serializer.is_valid():
                    serializer.save()
                else:
                    return Response(ReturnCode(1, msg=f'{serializer.errors}'),
                                    status=400)
            request.session['pk'] = openid
            return Response(ReturnCode(0, data=serializer.data), status=200)
        return Response(ReturnCode(1, msg='登录失败,请重新登录'),
                        status=status.HTTP_400_BAD_REQUEST)
Exemple #14
0
 def create(self, request, *args, **kwargs):
     '''
     创建商品信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     '''
     data = request.data.copy()
     try:
         type_id = data.get('type_id')
         type_obj = Type.objects.get(pk=int(type_id))
         yonghu_obj = self.get_person(request)
     except KeyError:
         return Response(ReturnCode(1, msg='object do not exists.'))
     try:
         commody = Commody()
         commody.name = data.get('name')
         commody.description = data.get('description')
         commody.price = data.get('price')
         commody.type = type_obj
         commody.qq = data.get('qq')
         commody.wx = data.get('wx')
         commody.phone_number = data.get('phone_number')
         commody.yonghu = yonghu_obj
         commody.save()
         ct = ContentType.objects.get_for_model(commody)
         imagePaths = self.get_image_path(request)
         for imagePath in imagePaths:
             img_path_obj = ImagePath()
             img_path_obj.content_type = ct
             img_path_obj.object_id = commody.pk
             img_path_obj.imgPath = imagePath
             img_path_obj.save()
         serializer = CommodySerializer(commody)
         return Response(ReturnCode(0, data=serializer.data))
     except exceptions.FieldDoesNotExist:
         return Response(
             ReturnCode(
                 1, msg='qq wx and phone_number must have at least one.'))
     except exceptions.FieldError:
         return Response(ReturnCode(1, msg='field error.'))
Exemple #15
0
def searchPostByNameOrContent(request):
    '''
        通过名字和关键字查询
        :param request:
        :return:
        '''
    query_set = request.query_params.get('q')
    post_obj = Post.objects.filter(
        Q(name__icontains=query_set) | Q(content__icontains=query_set))
    serializer = PostSerializer(post_obj, many=True)
    return Response(ReturnCode(0, data=serializer.data))
Exemple #16
0
def searchCommodyByNameOrDescription(request):
    '''
    根据商品名称、描述搜索商品
    :param request:
    :return:
    '''
    query_set = request.query_params.get('q')
    commody_obj = Commody.objects.filter(
        Q(name__icontains=query_set) | Q(description__icontains=query_set))
    commody_obj = commody_obj.filter(is_delete=False, is_end=False)
    serializer = CommodySerializer(commody_obj, many=True)
    return Response(ReturnCode(0, data=serializer.data))
Exemple #17
0
 def update(self, request, *args, **kwargs):
     '''
     更新商品信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     '''
     commody_obj = self.get_object()
     # 如果是已经删除或者是已经结束的商品返回报错
     if commody_obj.is_delete:
         return Response(ReturnCode(1, msg='have already delete.'))
     data = request.data.copy()
     type_id = data.get('type_id')
     # 删除参数中指定的字段,防止框架根据参数自动修改用户不能修改的字段
     if data.get('is_delete'):
         data.pop('is_delete')
     if data.get('create_time'):
         data.pop('create_time')
     serializer = CommodySerializer(commody_obj, data=data)
     if serializer.is_valid():
         try:
             if type_id:
                 try:
                     type_new = Type.objects.get(pk=int(type_id))
                 except exceptions.ObjectDoesNotExist:
                     return Response(
                         ReturnCode(1, msg='type objects do not exist.'))
                 commody_obj.type = type_new
                 commody_obj.save()
             serializer.save()
             return Response(
                 ReturnCode(0, msg='success.', data=serializer.data))
         except exceptions.FieldDoesNotExist:
             return Response(
                 ReturnCode(
                     1,
                     msg='qq wx and phone_number must have at least one.'))
     else:
         return Response(ReturnCode(1, msg='data invalid.'))
Exemple #18
0
 def create_reply_message_and_add_reply_num(self, obj):
     '''
     提交留言增加reply_num事务,乐观锁,循环三次
     '''
     ct = ContentType.objects.get_for_model(obj)
     try:
         yonghu_obj = self._get_create_yonghu()
     except KeyError:
         return Response(ReturnCode(1, msg='not login.'))
     except exceptions.ObjectDoesNotExist:
         return Response(ReturnCode(1, msg='user not find, cookie error.'))
     read_and_reply_num_obj = self._get_or_create_read_and_reply_num_model(
         ct, obj)
     msg = self.request.data.get('msg')
     reply_yonghu_pk = self.request.data.get('reply_yonghu_pk')
     reply_yonghu_obj = Yonghu.objects.get(pk=reply_yonghu_pk)
     floor = int(self.request.query_params.get('floor'))
     sid = transaction.savepoint()
     num = 0
     while num < 3:
         reply_num = obj.reply_num
         reply_message = ReplyMessage()
         reply_message.msg = msg
         reply_message.yonghu = yonghu_obj
         reply_message.content_type = ct
         reply_message.object_id = obj.pk
         reply_message.floor = floor
         reply_message.reply_yonghu = reply_yonghu_obj
         reply_message.save()
         read_and_reply_num_obj.reply_num += 1
         read_and_reply_num_obj.save()
         new_reply_num = obj.reply_num
         if reply_num == new_reply_num - 1:
             return Response(ReturnCode(0))
         else:
             num += 1
             transaction.savepoint_rollback(sid)
         return Response(ReturnCode(1, msg='create message error.'))
Exemple #19
0
 def create_main_message_and_add_main_reply_num(self, obj):
     '''
     创建主楼评论并且增加回复数
     '''
     ct = ContentType.objects.get_for_model(obj)
     try:
         yonghu_obj = self._get_create_yonghu()
     except KeyError:
         return Response(ReturnCode(1, msg='not login.'))
     except exceptions.ObjectDoesNotExist:
         return Response(ReturnCode(1, msg='user not find, cookie error.'))
     read_and_reply_num_obj = self._get_or_create_read_and_reply_num_model(
         ct, obj)
     msg = self.request.data.get('msg')
     sid = transaction.savepoint()
     num = 0
     while num < 3:
         reply_num = obj.reply_num
         main_floor_num = obj.main_floor_num
         main_message = MainMessage()
         main_message.msg = msg
         main_message.yonghu = yonghu_obj
         main_message.content_type = ct
         main_message.object_id = obj.pk
         main_message.floor = main_floor_num + 1
         main_message.save()
         read_and_reply_num_obj.reply_num += 1
         read_and_reply_num_obj.main_floor_num += 1
         read_and_reply_num_obj.save()
         new_reply_num = obj.reply_num
         new_main_floor_num = obj.main_floor_num
         if reply_num == new_reply_num - 1 and main_floor_num == new_main_floor_num - 1:
             return Response(ReturnCode(0))
         else:
             num += 1
             transaction.savepoint_rollback(sid)
         return Response(ReturnCode(1, msg='create message error.'))
Exemple #20
0
def wx_login(request):
    '''

    :param request:
    :return:
    '''
    code = request.data.get('code')
    userInfo = request.data.get('userInfo')
    if type('code') != type('str'):
        return Response(ReturnCode(1, msg='code错误'),
                        status=status.HTTP_400_BAD_REQUEST)
    else:
        res = code2Session.c2s_wx(settings.wx_APPID, code)
        if res.get('errcode') == 0:
            openid = res.get('openid')
            userInfo['openid'] = openid
            user = Yonghu.objects.filter(openid=openid)
            #不存在用户
            if len('user') == 0:
                serializer = YonghuSerializer(data=userInfo)
                if serializer.is_valid():
                    serializer.save()
                else:
                    return Response(ReturnCode(1, msg=serializer.errors),
                                    status=status.HTTP_400_BAD_REQUEST)
            else:
                serializer = YonghuSerializer(user[0], data=userInfo)
                if serializer.is_valid():
                    serializer.save()
                else:
                    return Response(ReturnCode(1, msg=serializer.errors),
                                    status=status.HTTP_400_BAD_REQUEST)
            request.session['pk'] = openid
            return Response(ReturnCode(0), status=200)
        return Response(ReturnCode(1, msg='登陆失败'),
                        status=status.HTTP_400_BAD_REQUEST)
Exemple #21
0
 def create(self, request, *args, **kwargs):
     '''
     上传图片
     :param request:
     :param args:
     :param kwargs:
     :return:
     '''
     imgPaths = request.data.get('imagePath')
     ct = ContentType.objects.get_for_model(self.get_object())
     img_path_obj = ImagePath()
     img_path_obj.content_type = ct
     img_path_obj.object_id = self.get_object().pk
     img_path_obj.imgPath = imgPaths
     img_path_obj.save()
     serializer = CommodySerializer(self.get_object())
     return Response(ReturnCode(0, data=serializer.data))
Exemple #22
0
 def create(self, request, *args, **kwargs):
     obj = self.get_object_instance()
     if obj is None:
         return Response(ReturnCode(1, msg='object do not exists.'))
     return self.create_reply_message_and_add_reply_num(obj)
Exemple #23
0
 def retrieve(self, request, *args, **kwargs):
     if self.add_read_num():
         return super().retrieve(self, request, *args, **kwargs)
     else:
         return Response(ReturnCode(1, msg='request error.'), status=404)