PUT 请求未出现在使用 ModelViewSet 的允许请求中
PUT request not appearing in allowed requests using ModelViewSet
我无法像文档中那样使用 ModelViewSet 发出放置请求。
我的观点,序列化器如下
class PostsViewSet(viewsets.ModelViewSet):
queryset = PostsModel.objects.all()
serializer_class = PostsSerializer
class PostsSerializer(serializers.ModelSerializer):
class Meta:
model=PostsModel
fields=('id','title', 'author', 'body')
如图所示,PUT 方法在允许的方法中。
这是我的 posts.urls.py 即我的应用程序
router = DefaultRouter()
router.register('', PostsViewSet)
urlpatterns = [
path('', include(router.urls))
]
这是我的根 urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('api/posts', include('posts.urls')),
]
并响应
http://localhost:8000/api/posts/1/
我认为问题出在这里:
urlpatterns = [
path('admin/', admin.site.urls),
path('api/posts', include('posts.urls')), # <-- Here
]
应该是:
path('api/posts/', include('posts.urls')), # need to append slash after posts
这里,PUT
请求没有问题,问题出在路由本身。当你点击 /posts/1
它没有被 django 找到(因为配置不正确)。
id 后不需要尾部斜杠
变化:
http://localhost:8000/api/posts/1/
至:
http://localhost:8000/api/posts/1
或将 URL 模式更改为:
path('api/posts/', include('posts.urls')),
并使用下面的 url:
访问 API
http://localhost:8000/api/posts/1/
我无法像文档中那样使用 ModelViewSet 发出放置请求。 我的观点,序列化器如下
class PostsViewSet(viewsets.ModelViewSet):
queryset = PostsModel.objects.all()
serializer_class = PostsSerializer
class PostsSerializer(serializers.ModelSerializer):
class Meta:
model=PostsModel
fields=('id','title', 'author', 'body')
如图所示,PUT 方法在允许的方法中。
这是我的 posts.urls.py 即我的应用程序
router = DefaultRouter()
router.register('', PostsViewSet)
urlpatterns = [
path('', include(router.urls))
]
这是我的根 urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('api/posts', include('posts.urls')),
]
并响应
http://localhost:8000/api/posts/1/
我认为问题出在这里:
urlpatterns = [
path('admin/', admin.site.urls),
path('api/posts', include('posts.urls')), # <-- Here
]
应该是:
path('api/posts/', include('posts.urls')), # need to append slash after posts
这里,PUT
请求没有问题,问题出在路由本身。当你点击 /posts/1
它没有被 django 找到(因为配置不正确)。
id 后不需要尾部斜杠
变化:
http://localhost:8000/api/posts/1/
至:
http://localhost:8000/api/posts/1
或将 URL 模式更改为:
path('api/posts/', include('posts.urls')),
并使用下面的 url:
访问 APIhttp://localhost:8000/api/posts/1/