簡體   English   中英

django rest框架-使用視圖集

[英]django rest framework - using viewsets

我閱讀了有關Django中的視圖集的信息,但並沒有完全理解所有內容。

例如,在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)

路由就像這樣

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

他們在視圖的注釋中說:“此視圖集自動提供listcreateretrieveupdatedestroy操作。”

編輯:::

 @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)
  • 如何訪問這些方法中的每一個? 以及如何訪問突出顯示方法?
  • 在路由器中注冊的url是/ snippets。 我要執行片段/創建嗎? 或摘要/刪除?
  • ModelViewSet實際上對url結構有什么作用?

您可以通過指定相應的HTTP方法來訪問這些操作,這是REST的核心思想。 即,使用HTTP方法執行其名稱所暗示的操作。

  • GET /snippets/ -列出代碼段對象
  • 帶有POST數據的POST /snippets/ -創建一個新對象
  • 用數據PATCH /snippets/ -創建一個新對象
  • GET /snippets/42檢索主鍵為42的對象
  • PUT/PATCH /snippets/42使用主鍵42更新對象
  • DELETE /snippets/42刪除主鍵為42的對象

要查看所有生成的和推斷的URL正則表達式,請將Django置於調試模式,然后向無效URL發出請求。 它將打印出類似以下內容:

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