Django 休息框架。设置动态路由
Django rest framework. Setting up dynamic routes
我正在为博客设置 API。我为 post 配置了注释的输出
这是我的 views.py 和 @action:
的一部分
urls.py
router = DefaultRouter()
router.register('api/posts', APIPost)
urlpatterns = [
path('', include(router.urls)),
]
views.py
...
@action(methods=['get'], detail=True)
def comments(self, request, pk=None):
if request.method == 'GET':
queryset = Comment.objects.filter(post__id=pk)
serializer = CommentSerializer(queryset, many=True)
return Response(serializer.data)
return Response(status=status.HTTP_403_FORBIDDEN)
现在我可以在 post 上获得所有评论。
http://127.0.0.1:8000/api/posts/{post_pk}/comments/
问题 是我不知道如何在
上获得单独的评论
http://127.0.0.1:8000/api/posts/{post_pk}/comments/{comment_pk}
我不断收到“404 未找到”错误
您应该定义 URL 到特定地址的路径或路线以便评论加载。
就像您定义的 APIPost
模型一样...评论 url 路线应该如下所示
router.register(r"comments", comments)
您应该创建另一个 CommentViewSet
。 (docs)
views.py
from rest_framework import viewsets
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
urls.py
from .views import CommentViewSet
router = DefaultRouter()
router.register("api/posts", APIPost)
router.register("api/comments", CommentViewSet)
urlpatterns = [
path('', include(router.urls)),
]
然后您可以通过向 http://127.0.0.1:8000/api/comments/{pk}
发出请求来检索。
另外,在您的代码中,
@action(methods=['get'], detail=True)
应该是 @action(methods=['get'], detail=False)
因为 comments
操作是检索所有评论的列表。 detail=True
用于返回单个对象。
- 您不需要手动检查
if request.method == 'GET'
,因为 DRF 已经在内部这样做了,因为您已经指定了 methods=["get"]
。
我正在为博客设置 API。我为 post 配置了注释的输出 这是我的 views.py 和 @action:
的一部分urls.py
router = DefaultRouter()
router.register('api/posts', APIPost)
urlpatterns = [
path('', include(router.urls)),
]
views.py
...
@action(methods=['get'], detail=True)
def comments(self, request, pk=None):
if request.method == 'GET':
queryset = Comment.objects.filter(post__id=pk)
serializer = CommentSerializer(queryset, many=True)
return Response(serializer.data)
return Response(status=status.HTTP_403_FORBIDDEN)
现在我可以在 post 上获得所有评论。
http://127.0.0.1:8000/api/posts/{post_pk}/comments/
问题 是我不知道如何在
上获得单独的评论http://127.0.0.1:8000/api/posts/{post_pk}/comments/{comment_pk}
我不断收到“404 未找到”错误
您应该定义 URL 到特定地址的路径或路线以便评论加载。
就像您定义的 APIPost
模型一样...评论 url 路线应该如下所示
router.register(r"comments", comments)
您应该创建另一个 CommentViewSet
。 (docs)
views.py
from rest_framework import viewsets
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
urls.py
from .views import CommentViewSet
router = DefaultRouter()
router.register("api/posts", APIPost)
router.register("api/comments", CommentViewSet)
urlpatterns = [
path('', include(router.urls)),
]
然后您可以通过向 http://127.0.0.1:8000/api/comments/{pk}
发出请求来检索。
另外,在您的代码中,
@action(methods=['get'], detail=True)
应该是@action(methods=['get'], detail=False)
因为comments
操作是检索所有评论的列表。detail=True
用于返回单个对象。- 您不需要手动检查
if request.method == 'GET'
,因为 DRF 已经在内部这样做了,因为您已经指定了methods=["get"]
。