Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 Django Rest Framework文档中不显示具有多个方法的多个嵌套资源_Python_Django_Python 2.7_Python 3.x_Django Rest Framework - Fatal编程技术网

Python Django Rest Framework文档中不显示具有多个方法的多个嵌套资源

Python Django Rest Framework文档中不显示具有多个方法的多个嵌套资源,python,django,python-2.7,python-3.x,django-rest-framework,Python,Django,Python 2.7,Python 3.x,Django Rest Framework,我想知道为什么Django REST框架内置文档不显示用户的方法。我只有以下URL可用的列表,创建,读取,更新: url(r'^users$', views.UserList.as_view()), url(r'^users/(?P<user_id>\w+)$', views.UserDetail.as_view()), 但是,下面显示的示例在内置文档中不可见。我在项目中也有大摇大摆的文档,所有内容都正确显示 URL.py: url(r'^users/(?P<user_id&

我想知道为什么Django REST框架内置文档不显示
用户的方法。我只有以下URL可用的
列表
创建
读取
更新

url(r'^users$', views.UserList.as_view()),
url(r'^users/(?P<user_id>\w+)$', views.UserDetail.as_view()),
但是,下面显示的示例在内置文档中不可见。我在项目中也有大摇大摆的文档,所有内容都正确显示

URL.py:

url(r'^users/(?P<user_id>[0-9]+)/object$', views.UserObject.as_view()),
应该有可见的路径
users/{user\u id}/object
知道为什么没有吗


编辑2017-08-19

我已经做了一个已经合并的。所以可能会尝试获取最新版本

编辑2017-08-13

这是一个带有DRF默认文档的文档,其中带有多个方法的额外操作不会显示在文档中

解决方案:使用

原创

我试着复制它,看起来在
django rest框架的
coreapi
中有一个bug

我尝试过rest框架的文档生成器,它看起来不错

如果从
users/{user\u id}/object
中删除
object
,则
url中有一个bug,它可以工作。例如,如果您尝试
xsers/{user\u id}/
,它将起作用

可以使用视图集更改设计方法。 ViewSet提供
操作
,而不是直接映射到
方法
。这是另一个抽象层次,通常更清晰

class UserViewSet(viewsets.ViewSet):
    """
    retrieve:
    Return the given user. 

    list:
    Return a list of all the existing users.

    create:
    Create a new user instance.

    update:
    Update a user.
    """

    serializer_class = UserSerializer

    def list(self, request):
        # Here you should put the code for GET user/
        pass

    def create(self, request):
        # Here you should put the code for POST user/
        pass

    def retrieve(self, request, pk=None):
        # Here you should put the code for RETRIEVE user/{pk}
        pass

    def update(self, request, pk=None):
        # Here you should put the code for UPDATE user/{pk}
        pass

    @detail_route(methods=['get'])
    def objects(self, request, pk=None):
        if request.method == 'GET'
        ....
在你的网址上

from myapp.views import UserViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'users', UserViewSet)
urlpatterns = router.urls

更多信息

嘿,我不太清楚哪些url有效,哪些无效。
UserObject
不工作吗?你还有其他人在工作吗?您是否尝试过完全按照文档所说的方式进行文档记录:您是说,当您访问Swagger文档页面时,所有内容都按照预期进行了文档记录,但是当您访问端点本身时,您没有看到DRF GUI?还是别的什么?@willemes只有
url(r'^users/(?P[0-9]+)/object$,views.UserObject.as_view())有问题,
其余部分工作正常。@YPCrumble我只看到
url(r'^users/(?P[0-9]+)/object$,views.UserObject.as_view()),
其余部分如更新问题中的屏幕截图所示。现在,请尝试更改文档生成器工具,而不是使用drf默认工具,尝试使用swagger,我已经在那里提供了链接,它说明了如何安装和配置,非常直截了当。我现在有swagger文档,但我也想使用drf。我想到的唯一想法是,如果您要求我,尝试为所有以
/users
开头的路径创建一个视图。。。我将使用一个视图集,其中定义
列表
(对于GET user/),
创建
(对于POST user/),
检索
(对于GET user/{pk})和
更新
(对于补丁用户/{pk},最后一个url中的
对象
用户
资源中的一个
操作
,因此您应该定义一个
详细路径
,在这里检查如何使用,这样,文档将正确生成。不幸的是,我尝试使用
视图集
进行操作,但没有结果。我以前从未使用过它,所以我很抱歉我不知道如何才能实现我的目标。让我们一起来。
class UserViewSet(viewsets.ViewSet):
    """
    retrieve:
    Return the given user. 

    list:
    Return a list of all the existing users.

    create:
    Create a new user instance.

    update:
    Update a user.
    """

    serializer_class = UserSerializer

    def list(self, request):
        # Here you should put the code for GET user/
        pass

    def create(self, request):
        # Here you should put the code for POST user/
        pass

    def retrieve(self, request, pk=None):
        # Here you should put the code for RETRIEVE user/{pk}
        pass

    def update(self, request, pk=None):
        # Here you should put the code for UPDATE user/{pk}
        pass

    @detail_route(methods=['get'])
    def objects(self, request, pk=None):
        if request.method == 'GET'
        ....
from myapp.views import UserViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'users', UserViewSet)
urlpatterns = router.urls