def get(self, request): """ 用户的品类订阅情况 --- """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() varieties = VarietiesRecord.objects.all() varieties = varieties.annotate( subscribed=Exists( VarietiesSubscription.objects.filter( user_id=self.request.user.id, varieties_id=OuterRef('id') ) ), subscription_id=Subquery( VarietiesSubscription.objects.filter( user_id=self.request.user.id, varieties_id=OuterRef('id') ).values('id')[:1] ), ).order_by('-subscribed', 'short_name') for variety in varieties: variety.count = FormulaSubscription.objects.filter(user_id=request.user.id, varieties_id=variety.id).count() paginator = Paginator(varieties, request.GET.get('number', 100)) page = paginator.page(request.GET.get('index', 1)) serializer = VarietiesRecordSerializerWithSubscription(page, many=True) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data, pageinfo=page ).to_response()
def post(self, request, *args, **kwargs): """ 订阅品类 --- parameters: - name: varieties_id description: 品目 id type: string paramType: form required: true """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() varieties_id = request.data.get('varieties_id', None) if not varieties_id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS).to_response() varieties = VarietiesRecord.objects.filter(id=varieties_id).first() if not varieties: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND).to_response() subscription = VarietiesSubscription.objects.filter(user_id=request.user.id, varieties_id=varieties_id).first() if not subscription: subscription = VarietiesSubscription( user_id=request.user.id, varieties_id=varieties_id, ) subscription.save() serializer = VarietiesSubscriptionSerializer(subscription) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data, ).to_response()
def post(self, request, *args, **kwargs): """ 用户登录 --- parameters: - name: username description: 用户名 type: string paramType: form required: true - name: password description: 密码 type: string paramType: form required: true """ username = request.data.get('username', None) password = request.data.get('password', None) if not username or not password: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_LOGIN_ERR).to_response() user = User.objects.filter(username=username).first() if not user: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_LOGIN_ERR).to_response() if not user.check_password(password): return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_LOGIN_ERR).to_response() login(request, user) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=UserSerializer(user).data ).to_response()
def delete(self, request, formula_id, varieties_id): """ 取消订阅公式 --- parameters: - name: formula_id description: 公式 id type: integer paramType: path required: true - name: varieties_id description: 品类 id type: integer paramType: path required: true """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() subscription = FormulaSubscription.objects.filter( user_id=request.user.id, formula_id=formula_id, varieties_id=varieties_id ).first() if subscription: subscription.delete() return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, ).to_response()
def post(self, request, *args, **kwargs): """ 提交意见反馈 --- parameters: - name: content description: 反馈内容 type: string paramType: form required: true - name: contact description: 联系方式 type: string paramType: form required: false """ content = request.data.get('content', None) contact = request.data.get('contact', None) if not content: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_FEEDBACK_CONTENT_NOT_EMPTY).to_response() feedback = UserFeedback(content=content, contact=contact) feedback.save() return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=UserFeedbackSerializer(feedback).data ).to_response()
def get(self, request, classification, *args, **kwargs): """ 公式可用区分维度 --- parameters: - name: classification description: 第几个区分维度 type: integer paramType: path required: true """ column_name = 'classification_%s' % classification if column_name not in [i.attname for i in Symbol._meta.fields]: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND, message='未找到数据' ).to_response() query_dict_1 = {'%s__isnull' % column_name: True} query_dict_2 = {column_name: ''} column_values = list(Symbol.objects.exclude( Q(**query_dict_1)|(Q(**query_dict_2)) ).values_list(column_name, flat=True).order_by(column_name).distinct()) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=column_values, ).to_response()
def get(self, request, openid): """ 检查微信 openid 是否已注册 --- parameters: - name: openid description: 微信 openid type: string paramType: path required: true responseMessages: - code: 200 message: 已注册 - code: 404 message: 未注册 """ user = User.objects.filter(openid=openid).first() if not user: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND, message='用户未注册' ).to_response() return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, message='用户已注册' ).to_response()
def get(self, request, scene_str): """ 向微信请求带参数二维码,用于用户扫码登录 --- parameters: - name: scene_str description: 注册时填用户手机号,登录时不用传 type: string paramType: path required: true """ qr = WechatQR.objects.filter(scene_str=scene_str).first() if not qr: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND, ).to_response() serializer = WechatQRSerializer(qr) if qr.openid: user = User.objects.filter(openid=qr.openid, is_active=True).first() if user: user.update_wechat_mobile(logger=logger) login(request, user) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data).to_response()
def post(self, request, *args, **kwargs): """ 新建公式 --- parameters: - name: title description: 标题 type: string paramType: form required: false - name: description description: 描述 type: string paramType: form required: false - name: formula description: 公式内容 type: string paramType: form required: false - name: comment description: 备注 type: string paramType: form required: false - name: varieties_id description: 品目 id type: integer paramType: form required: false """ if not request.user.id: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR ).to_response() varieties_id = request.data.get('varieties_id', None) if varieties_id and not VarietiesRecord.objects.filter( id=varieties_id).first(): return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS, message='没有该品目').to_response() serializer = FormulaSerializer(data=request.data) serializer.is_valid(raise_exception=True) formula_serializer = serializer.save(user_id=self.request.user.id) if varieties_id: FormulaVarieties(formula_id=formula_serializer.id, varieties_id=varieties_id).save() # 有品目的话自动订阅该 formula FormulaSubscription(user_id=request.user.id, formula_id=formula_serializer.id, varieties_id=varieties_id).save() return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data).to_response()
def get(self, request, chart_variety, sidebar): """ 主页图表下方数据表格接口,支持所有 chart_sidebar 表中的 variety-sidebar 组合 --- parameters: - name: chart_variety description: 品类 type: string paramType: path required: true - name: sidebar description: 侧边栏参数 type: string paramType: path required: true """ chart_sidebar = ChartSidebar.objects.filter(variety=chart_variety, sidebar=sidebar).first() if not chart_sidebar: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND, message='未找到对应数据').to_response() sidebar_tables = VarietiesSidebarTable.objects.filter( chart_sidebar_id=chart_sidebar.id) fields = ['timestamp', 'number'] # 定义最终生成的 shape/column for sidebar_table in sidebar_tables: # extra 格式 {"field": "source", "name": "来源", "fetch_code": "xxx"} # fetch_code 是获取数据的方式, 比如获取 symbol 表的 title, 那么就是 title extras = json.loads(sidebar_table.extra) for extra in extras: if extra['field'] not in fields: fields.append(extra['field']) data_list = [fields] for i, sidebar_table in enumerate(sidebar_tables): data = [None] * len(fields) table_data = ref_table(sidebar_table.data_code, sidebar_table.table, limit=1, timestamp=True) data[:2] = table_data[0] if table_data else [None] * 2 if sidebar_table.table.lower() == 'symbol': symbol = Symbol.objects.filter( symbol=sidebar_table.data_code.split('.')[0]).first() extras = json.loads(sidebar_table.extra) for extra in extras: data[fields.index(extra['field'])] = getattr( symbol, extra['fetch_code'], '') if not extra.get('text', '') else extra['text'] data_list.append(data) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data={ 'data': data_list }, ).to_response()
def get(self, request, *args, **kwargs): """ 用户的公式订阅情况 --- parameters: - name: varieties_id description: 品类 id type: integer paramType: query required: false - name: index description: 页数 type: integer paramType: query required: false - name: number description: 每页条数 type: integer paramType: query required: false """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() varieties_id = request.GET.get('varieties_id', None) formulas = Formula.objects.filter(Q(user_id=None) | Q(user_id=request.user.id)) if varieties_id: formulas = formulas.filter( id__in=FormulaVarieties.objects.filter(varieties_id=varieties_id).values_list('formula_id', flat=True)) formulas = formulas.annotate( subscribed=Exists( FormulaSubscription.objects.filter( user_id=self.request.user.id, formula_id=OuterRef('id'), varieties_id=varieties_id ) ), subscription_id=Subquery( FormulaSubscription.objects.filter( user_id=self.request.user.id, formula_id=OuterRef('id'), varieties_id=varieties_id ).values('id')[:1] ), ).order_by('-created_at') paginator = Paginator(formulas, request.GET.get('number', 100)) page = paginator.page(request.GET.get('index', 1)) serializer = FormulaSerializerWithSubscription(page, many=True) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data, pageinfo=page ).to_response()
def get(self, request): u""" 获取用户列表 --- parameters: - name: index description: 分页显示第几页 paramType: query required: false - name: number description: 每页显示几条数据 paramType: query required: false - name: descent description: 需要倒序的字段,用逗号分开,默认通过ID 正序 paramType: query required: false - name: is_page description: 是否需要分页,default=1 ('0', '不需要分页'),('1', '需要分页') paramType: query required: false """ query_dict = request.query_params.dict().copy() index, number, sort_tuple, descent = gen_page_info(query_dict) is_page = query_dict.pop('is_page', '1') user_objs = User.objects.order_by(*sort_tuple).all() if is_page == '1': paginator = Paginator(user_objs, number) try: pg = paginator.page(index) except PageNotAnInteger: # If page is not an integer, deliver first page. index = 1 pg = paginator.page(index) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. index = paginator.num_pages pg = paginator.page(index) serializer = UserSerializer(pg, many=True) res = serializer.data logger.info('正常返回分页:%s:' % (index)) return BackstageHTTPResponse(data=res, message=u'正常返回分页').to_response() else: serializer = UserSerializer(user_objs, many=True) res = serializer.data logger.info('正常返回所有数据') return BackstageHTTPResponse(data=res, message=u'正常返回所有数据').to_response()
def post(self, request, *args, **kwargs): """ 和 qian.useonline.cn 同步手机信息 --- """ if not request.user.is_authenticated: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() request.user.update_wechat_mobile() serializer = UserSerializer(request.user) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data ).to_response()
def get(self, request, *args, **kwargs): """ 获取当前用户信息 --- """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() request.user.update_wechat_mobile() data = UserSerializer(request.user).data return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=data, ).to_response()
def patch(self, request, *args, **kwargs): """ 修改当前用户 --- parameters: - name: head_img description: 图片 type: file paramType: form required: false - name: display_name description: 昵称 type: string paramType: form required: false - name: introduction description: 简介 type: string paramType: form required: false """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() head_img = request.data.get('head_img', None) display_name = request.data.get('display_name', None) introduction = request.data.get('introduction', None) if head_img: auth = oss2.Auth(settings.ALI_OSS_ACCESS_KEY_ID, settings.ALI_OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, settings.ALI_OSS_ENDPOINT, settings.ALI_OSS_BUCKET_NAME) remote_file_name = '%s.%s' % (uuid.uuid4().hex, head_img.name.split('.')[-1]) res = bucket.put_object(remote_file_name, head_img) logging.info('上传到阿里云, 文件名: %s, 请求id: %s, 返回状态: %s' % (remote_file_name, res.request_id, res.status)) remote_url = ''.join([settings.FATHER_URL, remote_file_name]) request.user.head_img = remote_url if display_name: request.user.display_name = display_name if introduction: request.user.introduction = introduction request.user.save() data = UserSerializer(request.user).data return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=data, ).to_response()
def wrapper(self, request): if not request.user.id: return BackstageHTTPResponse( BackstageHTTPResponse.API_HTTP_CODE_NO_PERMISSION).to_response( ) else: return func(self, request)
def get(self, request): u""" 查看用户的预测结果 --- parameters: - name: user_id description: 用户id paramType: query required: true - name: date description: 日期 paramType: query required: true - name: varieties_id description: 品类id paramType: query required: true """ query_dict = request.query_params.dict().copy() date = query_dict.get('date') varieties_id = query_dict.get('varieties_id') user_id = query_dict.get('user_id') pre_obj = PredictionRecord.objects.filter(user_id=user_id, varieties_id=varieties_id, date=date).first() if pre_obj: pre_obj.visit_number = pre_obj.visit_number + 1 pre_obj.save() serializer = PredictionRecordSerializer(pre_obj) res = serializer.data logger.info('正常返回所有数据') return BackstageHTTPResponse(data=res, message=u'正常返回所有数据').to_response()
def get(self, request, *args, **kwargs): """ 公式可用方法列表 --- parameters: - name: index description: 页数 type: integer paramType: query required: false - name: number description: 每页条数 type: integer paramType: query required: false """ formula_functions = FormulaFunction.objects.all() paginator = Paginator(formula_functions, request.GET.get('number', 100)) page = paginator.page(request.GET.get('index', 1)) serializer = FormulaFunctionSerializer(page, many=True) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data, pageinfo=page).to_response()
def get(self, request): u""" 获取预警提示,主力合约,预警类别信息 --- parameters: - name: alert_id description: 预警的id paramType: query required: true - name: index description: 分页显示第几页 paramType: query required: false - name: number description: 每页显示几条数据 paramType: query required: false """ query_dict = request.query_params.dict().copy() alert_id = query_dict.get('alert_id', None) obj = DayKline.objects.filter(date_time, ) return BackstageHTTPResponse( data=res, message=u'正常返回预警详细数据', ).to_response()
def get(self, request, *args, **kwargs): """ 数据表列表 --- parameters: - name: index description: 页数 type: integer paramType: query required: false - name: number description: 每页条数 type: integer paramType: query required: false - name: name description: 名字 type: string paramType: query required: false - name: type description: 类型 type: integer paramType: query required: false """ tables = Tables.objects.all() tables = TablesFilter(request.GET, queryset=tables).qs paginator = Paginator(tables, request.GET.get('number', 100)) page = paginator.page(request.GET.get('index', 1)) serializer = TableSerializer(page, many=True) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data, pageinfo=page).to_response()
def post(self, request): """ 新增一个标签 --- parameters: - name: name description: 名称 type: string paramType: form required: true - name: tag description: 标签 type: string paramType: form required: true - name: type description: 类型 type: string paramType: form required: true responseMessages: - code: 401 message: Not authenticated - code: 403 message: Insufficient rights to call this procedure """ collection = self.db.tag_ware data = self.request_data(request) name = data['name'] tag = data['tag'] tag_type = data['type'] if collection.find_one({'tag': tag}): logger.info('标签已存在') return BackstageHTTPResponse(message=u'标签已存在', data={}).to_response() else: total = '%s-%s-%s' % (name, tag, tag_type) document = { 'tag': tag, 'name': name, 'type': tag_type, 'total': total } collection.insert_one(document) return BackstageHTTPResponse(message=u'添加标签成功', data=document).to_response()
def post(self, request): u""" 提交预测 --- parameters: - name: date description: 时间 paramType: form required: true - name: varieties_id description: 品类 paramType: form required: true - name: prediction description: 预测涨跌(up:涨,down:跌,c:不变) paramType: form required: true """ post_data = self.request_data(request) # user_id = request.user.id user_obj = User.objects.filter(username='******').first() user_id = user_obj.id date = post_data.get('date', None) varieties_id = post_data.get('varieties_id', None) prediction = post_data.get('prediction', None) p_objs = PredictionRecord.objects.filter(date=date, varieties_id=varieties_id, user_id=user_id).all() if p_objs: logger.info('已经预测') res = PredictionRecordSerializer(p_objs[0]).data # res.update(get_predict_number(date)) return BackstageHTTPResponse( data=res, message=u'已经预测').to_response() else: quo_obj = QuotesRecords.objects.filter(varieties_id=varieties_id, date=date).first() quo_obj.ai_prediction = True quo_obj.save() obj = PredictionRecord(date=date, varieties_id=varieties_id, user_id=user_id, prediction=prediction) obj.save() res = PredictionRecordSerializer(obj).data logger.info('提交预测成功') # res.update(get_predict_number(date)) return BackstageHTTPResponse( data=res, message=u'提交预测成功').to_response()
def get(self, request): u""" 获取实时最新行情 --- parameters: - name: varieties_id description: 品类id paramType: query required: True """ today = datetime.datetime.today() date = str(today)[:10] query_dict = request.query_params.dict().copy() varieties_id = query_dict.get('varieties_id', None) if not varieties_id: return BackstageHTTPResponse( BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS, message=u'品类id必填').to_response() var_obj = AiVarieties.objects.get(pk=varieties_id) varieties = var_obj.varieties res = get_quotes(varieties, date) high = ref_ship(varieties, 'HIGH', limit=2, start=today, end=today) low = ref_ship(varieties, 'LOW', limit=2, start=today, end=today) open = ref_ship(varieties, 'OPEN', limit=2, start=today, end=today) opi = ref_ship(varieties, 'OPI', limit=2, start=today, end=today) vol = ref_ship(varieties, 'VOL', limit=2, start=today, end=today) dk_objs = DayKline.objects.filter(contract=varieties + '9999', date_time=date + ' 00:00:00').all() if dk_objs: obj = dk_objs[0] if obj.settlement_price: res['settlement_price'] = obj.settlement_price res['price'] = obj.price_close else: res['settlement_price'] = None res['varieties'] = varieties res['high'] = high and high[0] or None res['low'] = low and low[0] or None res['open'] = open and open[0] or None res['opi'] = opi and opi[0] or None res['vol'] = vol and vol[0] or None logger.info('正常返回品类对应关系') return BackstageHTTPResponse(data=res, message=u'正常返回品类对应关系').to_response()
def get(self, request, *args, **kwargs): """ 用户登出 --- """ logout(request) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, ).to_response()
def delete(self, request): """ 通过主键批量删除咨询 --- parameters: - name: id_lists description: 数据id列表,用逗号隔开 type: string paramType: form required: true responseMessages: - code: 401 message: Not authenticated - code: 403 message: Insufficient rights to call this procedure """ # post_data = self.request_data(request) post_data = request.data.copy() msg = u"NewsView:delete request.data is:%s" % str(post_data) logger.info(msg) id_list = post_data.get('id_lists', '') if not id_list: return BackstageHTTPResponse( BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS, message=u"数据_id列表为必填项").to_response() # col = self.db.news res = [] for i in id_list.split(','): _id = get_mongo_id(i) key = self.col.find_one({'_id': _id}) if key: # key['_id'] = str(key['_id']) self.col.find_one_and_delete({"_id": _id}) res.append(key) else: logger.info('_id:%s, 对应的数据不存在' % _id) return BackstageHTTPResponse( BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=res, message=u'批量删除成功').to_response()
def post(self, request): u""" 上传文件 --- parameters: - name: up_file description: 用户名 type: file paramType: form required: true :param request: :return: """ post_data = self.request_data(request) up_f = post_data.get('up_file', None) # f_name = post_data.get('file_name', '') f_name = up_f.name logger.info(u'上传文件, 文件名:%s' % f_name) if not up_f: msg = u"文件不存在" logger.info(msg) return BackstageHTTPResponse( BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS, message=msg).to_response() if not f_name: msg = u"文件名为必填" logger.info(msg) return BackstageHTTPResponse( BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS, message=msg).to_response() new_name = str(uuid.uuid1())[:8] + f_name auth = oss2.Auth(settings.ALI_OSS_ACCESS_KEY_ID, settings.ALI_OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, settings.ALI_OSS_ENDPOINT, settings.ALI_OSS_BUCKET_NAME) res = bucket.put_object(new_name, up_f.read()) logger.info(u'上传文件, 文件名:%s, 请求id: %s, 返回状态: %s' % (new_name, res.request_id, res.status)) url = ''.join([settings.FATHER_URL, new_name]) return BackstageHTTPResponse(message=u'上传成功', data=dict(url=url)).to_response()
def delete(self, request, id, varieties_id): """ 删除公式和品目的对应关系 --- parameters: - name: id description: 公式 id type: integer paramType: path required: true - name: varieties_id description: 品类 id type: integer paramType: path required: true """ if not request.user.id: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR ).to_response() formula = Formula.objects.filter(id=id).first() if not formula: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND ).to_response() if not formula.user_id: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NO_PERMISSION, message='公有公式不允许删除').to_response() if formula.user_id != request.user.id: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NO_PERMISSION, message='该公式不属于您').to_response() formula_varieties = FormulaVarieties.objects.filter( formula_id=id, varieties_id=varieties_id).first() if formula_varieties: formula_varieties.delete() return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, ).to_response()
def get(self, request): """ 获取用户默认邀请码 --- """ if not request.user.id: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response() ic = InvitationCode.objects.filter(user_id=request.user.id, default=True).first() if not ic: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND, message='用户没有默认邀请码' ).to_response() serializer = InvitationCodeSerializer(ic) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data ).to_response()
def get(self, request, id): """ 品类详情 --- parameters: - name: id description: 品类id type: string paramType: path required: true """ varieties = VarietiesRecord.objects.filter(id=id).first() if not varieties: return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND, ).to_response() serializer = VarietiesRecordSerializer(varieties) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data).to_response()
def get(self, request, code, *args, **kwargs): """ 邀请码信息 --- parameters: - name: code description: 邀请码 type: string paramType: path required: true """ invitation_code = InvitationCode.objects.filter(code=code).first() if not invitation_code: return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND).to_response() serializer = InvitationCodeWithUserSerializer(invitation_code) return BackstageHTTPResponse( code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, data=serializer.data ).to_response()