今天在做项目时,需要在一个ViewSets中调用另外两个ViewSets,返回对应的序列化之后的内容,其中一个需要传参。
假设A为主动的ViewSets,被调用的两个ViewSets类分别为B、C(需要参数),以下为A,B,C的代码:
# 这是A的某行代码(第一次需要无参调用B)
navData = json.loads(urllib.request.urlopen('http://localhost:8000/api/index/navs').read().decode())
# 这是A的某行代码(第二次需要传参调用C)
spreadData = json.loads(urllib.request.urlopen(
'http://localhost:8000/api/index/mustEat?must=spread').read().decode())
# 这是B的代码
class navsViews(viewsets.GenericViewSet, mixins.ListModelMixin):
queryset = Nav.objects.all()
serializer_class = NavSerializer
def list(self, request, *args, **kwargs):
ser = self.get_serializer(self.queryset, many=True)
self.serData = ser.data
return Response(ser.data)
# 这是C的代码
class mustEatViews(viewsets.GenericViewSet, mixins.ListModelMixin):
queryset = Goods.objects.all()
serializer_class = NavSerializer
def list(self, request, *args, **kwargs):
mustName = request.query_params.get('must') # 获取传过来的参数:参数(单参)解析
if mustName == 'mustEat':
self.queryset = self.queryset[:4]
else:
self.queryset = self.queryset[4:8]
ser = self.get_serializer(self.queryset, many=True)
sqlData = ser.data
foodsData = []
for foodData in sqlData:
data = {
'spreadListName': foodData['foodName'],
'spreadListpic': foodData['foodImg']
}
foodsData.append(data)
return Response(foodsData)
from rest_framework.routers import SimpleRouter
from shops.views import *
app_name = 'shops'
router = SimpleRouter()
router.register(r'mustEat', mustEatViews) # 传参url
router.register(r'navs', navsViews) # 无参url
urlpatterns = [
]
urlpatterns += router.urls