Я интегрирую бэкэнд django-rest-framework
и интерфейс Ember
(с EmberData
). Это мои версии:POST-запросы с EmberData и Django REST Framework
- Джанго 1,9
- djangorestframework 3.3.2
- Джанго-отдых-каркасного JSON-апи (latest version из GitHub)
- уголек-кли 1.13.13
- Ember 2.2.0
- Ember-данные 2.2.1
GET
запросы являются работающ штраф, но POST
s нет. Это вид запроса, пришедшего из EmberData
:
{
"data": {
"attributes": {
"name": "The project name",
"description": "The project description",
"price": 123
},
"relationships": {
"onwer": {
"data": null
}
},
"type": "projects"
}
}
Но Джанго разваливается, и отчетность:
Page not found ... The current URL, api/projects, didn't match any of these
Мои URL-адреса создаются с помощью маршрутизатора:
from rest_framework.routers import DefaultRouter
from .viewsets.projects import ProjectViewSet
router = DefaultRouter()
...
router.register(r'projects', ProjectViewSet)
...
и ViewSet
:
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
s обеспечивают поддержку .create()
, поэтому эта операция POST должна поддерживаться.
Я также подправил слеш для Джанго, чтобы принять POST
с при /projects
как EmberData
делают (кроме умолчанию /projects/
, что Django является ожидающим)
# EmberData does POST to /projects (not /projects/), so we need this:
APPEND_SLASH = False
Проблемы, которую я вижу в том, что маршрутизатор Django
«s не генерирует 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
s запросы от EmberData
до drf
?
проекта-лист с методом POST будет вызывать создание() –
@GeoJacob: Это то, что я думал тоже, но потом, почему «Страница не найдена ... Ток URL, api/projects, не соответствует ни одному из этих « – dangonfast
@GeoJacob: может быть, хотя django имеет флаг' APPEND_SLASH', это не учитывается «DefaultRouter»? В любом случае это добавляет трейлинг-косую черту! – dangonfast