我正在集成django-rest-framework
後端和Ember
前端(使用EmberData
)。這是我的版本:使用EmberData和Django REST框架的POST請求
- 的Django 1.9
- djangorestframework 3.3.2
- (從GitHub latest version)Django的REST的架構,JSON-API
- 燼-CLI 13年1月13日
- 燼2.2.0
- 餘燼數據2.2.1
GET
請求是工作正常,但不是POST
。這是EmberData
來的各種要求:
{
"data": {
"attributes": {
"name": "The project name",
"description": "The project description",
"price": 123
},
"relationships": {
"onwer": {
"data": null
}
},
"type": "projects"
}
}
但Django的崩潰,以及報告:
from rest_framework.routers import DefaultRouter
from .viewsets.projects import ProjectViewSet
router = DefaultRouter()
...
router.register(r'projects', ProjectViewSet)
...
和ViewSet
:
Page not found ... The current URL, api/projects, didn't match any of these
我的網址與路由器創建的:
from rest_framework import viewsets
from rest_framework import filters
from vwrks.models import Project
from ..serializers import ProjectSerializer
class ProjectViewSet(viewsets.ModelViewSet):
"""
A viewset for viewing and editing Project instances.
"""
serializer_class = ProjectSerializer
queryset = Project.objects.all()
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter)
filter_fields = ('seller', 'artist', 'subcategory')
search_fields = ('name', 'description')
根據文檔(http://www.django-rest-framework.org/api-guide/viewsets/#modelviewset),ViewSet
提供對.create()
的支持,因此應支持此POST操作。
我也調整了尾隨斜槓Django的,爲了在/projects
爲EmberData
接受POST
s的做(除了默認/projects/
是Django的期待)
# EmberData does POST to /projects (not /projects/), so we need this:
APPEND_SLASH = False
的問題,我看到的是, Django
的路由器不產生project-create
URL(僅project-list
和project-detail
列):
^api/ ^projects/$ [name='project-list']
^api/ ^projects\.(?P<format>[a-z0-9]+)/?$ [name='project-list']
^api/ ^projects/(?P<pk>[^/.]+)/$ [name='project-detail']
^api/ ^projects/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='project-detail']
我能做些什麼來獲得POST
的請求從EmberData
到drf
工作?
項目清單與POST方法將調用創建() –
@GeoJacob:這是我想太多,但隨後,爲什麼沒有發現「頁面...當前URL,api/projects,沒有匹配任何這些「 – dangonfast
@GeoJacob:即使django有一個'APPEND_SLASH'標誌,這個'DefaultRouter'沒有考慮到這個嗎?無論如何,它會添加尾隨斜線! – dangonfast