parent
d34073301b
commit
dc2fa091cb
@ -0,0 +1,141 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding:utf-8 -*- |
||||||
|
# project: 10月 |
||||||
|
# author: liuyu |
||||||
|
# date: 2021/10/14 |
||||||
|
from rest_framework.views import APIView |
||||||
|
|
||||||
|
from api.utils.response import BaseResponse |
||||||
|
from api.utils.auth import ExpiringTokenAuthentication, UserAdInfoPermission |
||||||
|
from rest_framework.response import Response |
||||||
|
from api.models import UserAdDisplayInfo |
||||||
|
from api.utils.serializer import UserAdInfoSerializer |
||||||
|
from rest_framework.pagination import PageNumberPagination |
||||||
|
import logging |
||||||
|
|
||||||
|
from api.utils.storage.caches import reset_short_response_cache |
||||||
|
from api.utils.storage.storage import Storage |
||||||
|
|
||||||
|
logger = logging.getLogger(__name__) |
||||||
|
|
||||||
|
|
||||||
|
class PageNumber(PageNumberPagination): |
||||||
|
page_size = 10 # 每页显示多少条 |
||||||
|
page_size_query_param = 'size' # URL中每页显示条数的参数 |
||||||
|
page_query_param = 'page' # URL中页码的参数 |
||||||
|
max_page_size = None # 最大页码数限制 |
||||||
|
|
||||||
|
|
||||||
|
class UserAdInfoView(APIView): |
||||||
|
authentication_classes = [ExpiringTokenAuthentication, ] |
||||||
|
permission_classes = [UserAdInfoPermission, ] |
||||||
|
|
||||||
|
def get(self, request): |
||||||
|
|
||||||
|
res = BaseResponse() |
||||||
|
|
||||||
|
ad_name = request.query_params.get("search_key", None) |
||||||
|
ad_info_list = UserAdDisplayInfo.objects.filter(user_id=request.user) |
||||||
|
if ad_name: |
||||||
|
ad_info_list = ad_info_list.filter(ad_name=ad_name) |
||||||
|
|
||||||
|
page_obj = PageNumber() |
||||||
|
page_paginate_obj = page_obj.paginate_queryset(queryset=ad_info_list.order_by("-created_time"), |
||||||
|
request=request, |
||||||
|
view=self) |
||||||
|
page_serializer_obj = UserAdInfoSerializer(page_paginate_obj, many=True, ) |
||||||
|
res.data = page_serializer_obj.data |
||||||
|
res.count = ad_info_list.count() |
||||||
|
return Response(res.dict) |
||||||
|
|
||||||
|
def put(self, request): |
||||||
|
data = request.data |
||||||
|
ad_pk = data.get("id", None) |
||||||
|
if ad_pk: |
||||||
|
ad_info_obj = UserAdDisplayInfo.objects.filter(user_id=request.user, pk=ad_pk).first() |
||||||
|
res = BaseResponse() |
||||||
|
update_fields = [] |
||||||
|
logger.info(f"user {request.user} ad_info {ad_info_obj} update input data {data}") |
||||||
|
f_fields = ["ad_name", "ad_uri", "description", "is_enable"] |
||||||
|
for f_f in f_fields: |
||||||
|
f_v = data.get(f_f) |
||||||
|
if f_v is not None and f_v != '': |
||||||
|
setattr(ad_info_obj, f_f, f_v) |
||||||
|
update_fields.append(f_f) |
||||||
|
else: |
||||||
|
if f_f == 'description': |
||||||
|
continue |
||||||
|
else: |
||||||
|
res.code = 1001 |
||||||
|
res.msg = '参数有误' |
||||||
|
return Response(res.dict) |
||||||
|
try: |
||||||
|
weight = int(data.get("weight", ad_info_obj.weight)) |
||||||
|
if 0 <= weight <= 100: |
||||||
|
ad_info_obj.weight = weight |
||||||
|
update_fields.append("weight") |
||||||
|
except Exception as e: |
||||||
|
logger.error( |
||||||
|
f"ad_info {ad_info_obj} weight {data.get('weight', ad_info_obj.weight)} get failed Exception:{e}") |
||||||
|
|
||||||
|
try: |
||||||
|
ad_info_obj.save(update_fields=update_fields) |
||||||
|
logger.info( |
||||||
|
f"user {request.user} ad_info {ad_info_obj} update now data {ad_info_obj.__dict__}") |
||||||
|
res.data = UserAdInfoSerializer(ad_info_obj).data |
||||||
|
reset_short_response_cache(request.user) |
||||||
|
return Response(res.dict) |
||||||
|
except Exception as e: |
||||||
|
logger.error( |
||||||
|
f"user {request.user} ad_info {ad_info_obj} update error data {data} Exception {e}") |
||||||
|
res.code = 1001 |
||||||
|
return Response(res.dict) |
||||||
|
|
||||||
|
return self.get(request) |
||||||
|
|
||||||
|
def post(self, request): |
||||||
|
data = request.data |
||||||
|
data_info = {} |
||||||
|
res = BaseResponse() |
||||||
|
f_fields = ["ad_name", "ad_uri", "description", "is_enable"] |
||||||
|
for f_f in f_fields: |
||||||
|
f_v = data.get(f_f) |
||||||
|
if f_v is not None and f_v != '': |
||||||
|
data_info[f_f] = f_v |
||||||
|
else: |
||||||
|
if f_f == 'description': |
||||||
|
continue |
||||||
|
else: |
||||||
|
res.code = 1001 |
||||||
|
res.msg = "参数有误,添加失败" |
||||||
|
return Response(res.dict) |
||||||
|
|
||||||
|
try: |
||||||
|
weight = int(data.get("weight", 1)) |
||||||
|
if 0 <= weight <= 100: |
||||||
|
data_info["weight"] = weight |
||||||
|
except: |
||||||
|
pass |
||||||
|
|
||||||
|
try: |
||||||
|
logger.error(f"user {request.user} add new ad {data.get('pk', '')} data {data_info}") |
||||||
|
ad_info_obj = UserAdDisplayInfo.objects.create(user_id=request.user, **data_info) |
||||||
|
res.data = UserAdInfoSerializer(ad_info_obj).data |
||||||
|
return Response(res.dict) |
||||||
|
except Exception as e: |
||||||
|
logger.error(f"user {request.user} add new ad {data_info} failed Exception:{e}") |
||||||
|
res.code = 1005 |
||||||
|
res.msg = "广告名称已经存在,或者字段缺少" |
||||||
|
return Response(res.dict) |
||||||
|
|
||||||
|
def delete(self, request): |
||||||
|
ad_pk = request.query_params.get("pk", None) |
||||||
|
if ad_pk: |
||||||
|
ad_info_obj = UserAdDisplayInfo.objects.filter(user_id=request.user, pk=ad_pk).first() |
||||||
|
if ad_info_obj: |
||||||
|
storage = Storage(request.user) |
||||||
|
storage.delete_file(ad_info_obj.ad_pic) |
||||||
|
reset_short_response_cache(request.user) |
||||||
|
ad_info_obj.delete() |
||||||
|
|
||||||
|
return self.get(request) |
Loading…
Reference in new issue