代码之家  ›  专栏  ›  技术社区  ›  intelis

Django Rest框架中的空路由

  •  1
  • intelis  · 技术社区  · 8 年前

    我正在尝试将一个简单的方法注册到 DRF 我遇到了一些问题。这个 未显示路线 在API Explorer中。

    可能是我遗漏了一些简单的东西。。
    如何获取要在API中显示的注册路由?

    结果(空)

    GET /api/
    HTTP 200 OK
    Allow: GET, HEAD, OPTIONS
    Content-Type: application/json
    Vary: Accept
    
    {}
    

    URL

    from django.conf.urls import url, include
    from django.contrib import admin
    from rest_framework import routers
    from rest_framework_jwt.views import obtain_jwt_token
    
    from reservations.views.homepage import HomepageView
    from users.views import UserViewSet
    
    """ API routes
    """
    router = routers.DefaultRouter()
    router.register(r'test', UserViewSet, base_name='users')
    
    """ Route patterns
    """
    urlpatterns = [
        url(r'^$', HomepageView.as_view(), name='homepage'),
        url(r'^api/', include(router.urls)),
        url(r'^api-token-auth/', obtain_jwt_token),
        url(r'^admin/', admin.site.urls),
    ]
    

    视图集

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from rest_framework import viewsets
    from rest_framework.response import Response
    
    
    class UserViewSet(viewsets.ViewSet):
    
        def register(self, request):
            return Response({
                'status': 'User registered'
            })
    
    3 回复  |  直到 8 年前
        1
  •  2
  •   Muhammad Hassan    8 年前

    ViewSet对每个方法(GET、POST、PUT等)都有一些特定的方法,如list、detail、create、update等。您应该使用这些方法。Api explorer根据这些方法决定视图允许使用哪种方法。您可以看到这些方法 here .

    在您的情况下,我假设您想要创建新用户。所以您应该使用这样的create方法。

    class UserViewSet(viewsets.ViewSet):
    
        def create(self, request, *args, **kwargs):
            return Response({
                'status': 'User registered'
            })
    
        2
  •  1
  •   Anup Yadav    8 年前

    如果只想使用then列表,请创建其中必须包含的方法。请检查下面的代码示例。有关详细信息,请查看此链接 http://www.django-rest-framework.org/api-guide/viewsets/

    class UserViewSet(viewsets.ViewSet):
    
        def list(self, request):
            queryset = crm_models.EmployeeLeaveApp.objects.all()
            serializer = serializers.EmployeeVisitSerializer(queryset, many=True)
            return Response(serializer.data)
    
        def retrieve(self, request, pk=None):
            queryset = crm_models.EmployeeLeaveApp.objects.all()
            user = get_object_or_404(queryset, pk=pk)
            serializer = serializers.EmployeeVisitSerializer(user)
            return Response(serializer.data)
    
    
        def list(self, request):
            pass
    
        def create(self, request):
            pass
    
        def retrieve(self, request, pk=None):
            pass
    
        def update(self, request, pk=None):
            pass
    
        def partial_update(self, request, pk=None):
            pass
    
        def destroy(self, request, pk=None):
            pass
    
        3
  •  1
  •   Hugo Brilhante    8 年前

    为此使用@list\u路由。 marking extra actions for routing

    ...
    
    @list_route(methods=['post'])
    def register(self, request):
        return Response({
            'status': 'User registered'
        })
    
    推荐文章