简体   繁体   English

django rest框架-使用视图集

[英]django rest framework - using viewsets

I read about the viewsets in django, but haven't fully understood everything.. 我阅读了有关Django中的视图集的信息,但并没有完全理解所有内容。

When using a viewset in django, for example - 例如,在Django中使用视图集时-

class SnippetViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`,
    `update` and `destroy` actions.

    Additionally we also provide an extra `highlight` action.
    """
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,
                          IsOwnerOrReadOnly,)

    @detail_route(renderer_classes=[renderers.StaticHTMLRenderer])
    def highlight(self, request, *args, **kwargs):
        snippet = self.get_object()
        return Response(snippet.highlighted)

and Routing is like this 路由就像这样

router = DefaultRouter()
router.register(r'snippets', views.SnippetViewSet)

In the comments in the View they say - "This viewset automatically provides list , create , retrieve , update and destroy actions." 他们在视图的注释中说:“此视图集自动提供listcreateretrieveupdatedestroy操作。”

EDIT::: 编辑:::

 @detail_route(methods=['post'])
    def register(request):
        serializer = UserSerializer(data=request.DATA)
        if serializer.is_valid():
            user = User.objects.create_user(
                username = serializer.init_data['username'],
                password = serializer.init_data['password'],
            )

            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  • How do I access each one of those methods? 如何访问这些方法中的每一个? and How do I access the highlight method? 以及如何访问突出显示方法?
  • The url registered in the router is /snippets. 在路由器中注册的url是/ snippets。 Do I do snippets/create? 我要执行片段/创建吗? or snippets/delete? 或摘要/删除?
  • What does the ModelViewSet actually does to the url structure? ModelViewSet实际上对url结构有什么作用?

You access those actions by specifying the corresponding HTTP method, which is a core idea in REST . 您可以通过指定相应的HTTP方法来访问这些操作,这是REST的核心思想。 Namely, using the HTTP methods to do what their name implies. 即,使用HTTP方法执行其名称所暗示的操作。

  • GET /snippets/ - list the snippet objects GET /snippets/ -列出代码段对象
  • POST /snippets/ with POST data - create a new object 带有POST数据的POST /snippets/ -创建一个新对象
  • PATCH /snippets/ with data - create a new object 用数据PATCH /snippets/ -创建一个新对象
  • GET /snippets/42 - retrieve object with a primary key of 42 GET /snippets/42检索主键为42的对象
  • PUT/PATCH /snippets/42 - update object with the primary key of 42 PUT/PATCH /snippets/42使用主键42更新对象
  • DELETE /snippets/42 - delete object with the primary key of 42 DELETE /snippets/42删除主键为42的对象

To see all the generated and inferred URL regexes, put Django in debug mode and issue a request to an invalid URL. 要查看所有生成的和推断的URL正则表达式,请将Django置于调试模式,然后向无效URL发出请求。 It will print out something like: 它将打印出类似以下内容:

Using the URLconf defined in my_app.urls, Django tried these URL patterns, in this order:
^ ^$ [name='api-root']
^ ^\.(?P<format>[a-z0-9]+)$ [name='api-root']
^ ^AltEmail/$ [name='altemail-list']
^ ^AltEmail/\.(?P<format>[a-z0-9]+)$ [name='altemail-list']
^ ^AltEmail/(?P<pk>[^/.]+)/$ [name='altemail-detail']
^ ^AltEmail/(?P<pk>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='altemail-detail']
[...]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM