Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有基于分类的api视图的DetailApiViewset_Python_Django_Django Rest Framework_Django Views_Django Class Based Views - Fatal编程技术网

Python 具有基于分类的api视图的DetailApiViewset

Python 具有基于分类的api视图的DetailApiViewset,python,django,django-rest-framework,django-views,django-class-based-views,Python,Django,Django Rest Framework,Django Views,Django Class Based Views,我正在尝试创建详细的API视图集,但现在,每当我转到“matches/API/matches/1/”时,都找不到该页面。ListCreateAPIView工作正常 以下是我的视图集: class MatchViewset(viewsets.ViewSetMixin,泛型.ListCreateAPIView): 序列化程序\u类=匹配序列化程序 def get_queryset(自我): header\u token=self.request.META.get('HTTP\u AUTHORIZAT

我正在尝试创建详细的API视图集,但现在,每当我转到“matches/API/matches/1/”时,都找不到该页面。ListCreateAPIView工作正常

以下是我的视图集:

class MatchViewset(viewsets.ViewSetMixin,泛型.ListCreateAPIView):
序列化程序\u类=匹配序列化程序
def get_queryset(自我):
header\u token=self.request.META.get('HTTP\u AUTHORIZATION',None)
打印(标题\标记)
如果标头_标记不是无:
尝试:
token=sub('token','',self.request.META.get('HTTP_AUTHORIZATION',None))
token\u obj=token.objects.get(key=token)
self.request.user=token\u obj.user
除Token.DoesNotExist外:
通过
打印(self.request.user)
返回Match.objects.filter(creator=self.request.user)
类MatchDetailViewset(generics.RetrieveUpdatedStroyapiView):
queryset=Match.objects.all()
序列化程序\u类=匹配序列化程序
和路由器:

router=routers.DefaultRouter()
路由器.register(r'matches',matches_views.MatchViewset,base_name=“matches”)
和网址:

app_name='matches'
URL模式=[
路径('api/',包括(router.url)),
]

根据此处的文档:

router.register(r'matches',matches\u views.MatchViewset,base\u name=“matches”)
之后,必须给出

urlpatterns=router.url


我想这将解决问题

根据这里的文档:

router.register(r'matches',matches\u views.MatchViewset,base\u name=“matches”)
之后,必须给出

urlpatterns=router.url

我想这会解决问题

  • MatchDetailViewset
    未在urlpatterns中注册,这就是为什么会出现404错误
  • DRF路由器似乎不支持使用相同前缀注册多个视图集。 所以也许你应该试试这样:
  • MatchDetailViewset
    未在urlpatterns中注册,这就是为什么会出现404错误
  • DRF路由器似乎不支持使用相同前缀注册多个视图集。 所以也许你应该试试这样:

  • 我在我的URL文件中使用了include函数,所以我猜不是这样。我只是补充了一个问题。我在我的URL文件中使用了include函数,所以我猜不是这样。我只是补充了一个问题。
    class MatchViewSet(viewsets.ModelViewSet):
        serializer_class = MatchSerializer
        queryset = Match.objects.all()
    
        def list(self, request, *args, **kwargs):
            header_token = self.request.META.get('HTTP_AUTHORIZATION', None)
            print(header_token)
            if header_token is not None:
                try:
                    token = sub('Token ', '', self.request.META.get('HTTP_AUTHORIZATION', None))
                    token_obj = Token.objects.get(key=token)
                    self.request.user = token_obj.user
                except Token.DoesNotExist:
                    pass
            print(self.request.user)
    
            # customize the queryset for listview
            queryset = self.get_queryset().filter(creator=self.request.user)
    
            page = self.paginate_queryset(queryset)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                return self.get_paginated_response(serializer.data)
    
            serializer = self.get_serializer(queryset, many=True)
            return Response(serializer.data)