Rad*_*Hex 19 django http backbone.js django-rest-framework
我在文档中使用SimpleRouter tuorial.
只是为了测试我已经创建了一个临时的Authentication类:
class BackboneBasicAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
user = User.objects.filter(username="james")
return (user, None)
Run Code Online (Sandbox Code Playgroud)
设置看起来像这样
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'core.rest_authentication.BackboneBasicAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
}
Run Code Online (Sandbox Code Playgroud)
提交PUT请求将返回405 METHOD NOTOWOWED
{"detail": "Method 'PUT' not allowed."}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用X-HTTP-Method-Override.不行.
我有什么想法我做错了吗?
我花了一整天的时间试图解决这个问题,希望有人可以提供帮助!:)
Pau*_*ipp 19
简单的路由器将put属性添加到视图中,以便为与您提供的模式匹配的URL添加作为附加模式元素添加的pk.
例如,如果您使用:
simple_router.register('widgets/', WidgetViewSet)
Run Code Online (Sandbox Code Playgroud)
该框架将创建两个url模式:
'^widgets/$'
'^widgets/<?P<pk>[^/]+/$'
Run Code Online (Sandbox Code Playgroud)
我猜你只是在尝试满足第一个匹配的URL,视图集实例只有框架添加的'get'('list')和'post'('create')支持,所以它会导致错误你是否试图放置/补丁或删除.要使这些方法起作用,您需要提供pk,以便框架知道您正在修改或删除哪个窗口小部件,以便您的URL匹配支持这些方法的视图.
这很令人困惑,如果您发现它太混乱,您可以选择不使用simple_router.然后,您可以指定自己的方法映射,以便rest_framework将调度到您的put方法,例如
url('^widgets/<?P<pk>[^/]+/$', WidgetViewSet.as_view({'put': 'update',
'get': 'retrieve',
'patch': 'partial_update',
'delete': 'destroy'}...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22024 次 |
| 最近记录: |