【发布时间】:2015-08-31 23:29:45
【问题描述】:
我正在使用带有 rest 框架的 django,我尝试在现有对象上测试 POST,但我不断收到 405。我的 ViewSet 看起来像这样:
class Agents(viewsets.ModelViewSet):
serializer_class = serializer.AgentSerializer
model = serializer_class.Meta.model
....
在网址中:
router = routers.SimpleRouter()
router.register(r'rest/agents', api_views.Agents, "Agent")
...
urlpatterns += router.urls
我从 APITestCase 类(休息测试)中调用发布请求,我的发布请求如下所示:
response = self.client.post(url, {'available': True, 'online':True}, format='json')
打印 url 显示“/chat/rest/agents/1910_1567/”,而 1910_1567 是现有代理的有效 id(我在设置期间创建代理并使用它的 id)。
我已经看到其他关于休息帖子获得 405 的问题,但那里的所有解决方案都与 url 相关,在我的情况下,url 是正确的。我什至在测试之外运行设置并通过浏览器访问 url 以获取对象并且对象确实存在。但是当我尝试发布到它时 - 405.
有什么想法吗?
谢谢!
【问题讨论】:
-
PS 我认为它很明显,但是当我覆盖 update() 函数并添加 print 时, print 永远不会被调用,例如,我得到 405 不是来自 update 的实现,而是在此之前。真的看起来像 url 相关的,但我验证了 url 并且它没问题:/
-
尾部斜杠应该在那里吗?如果你设置
router = SimpleRouter(trailing_slash=False)呢? -
@Railslide 帖子网址通常以斜杠结尾,但我确实尝试了您的建议并得到了相同的结果。
-
如果你卷曲到它会怎样?
-
@Railslide 我不明白——“卷曲”是什么意思?谢谢:)
标签: django django-rest-framework