1

Я интегрирую бэкэнд django-rest-framework и интерфейс EmberEmberData). Это мои версии: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?

+0

проекта-лист с методом POST будет вызывать создание() –

+0

@GeoJacob: Это то, что я думал тоже, но потом, почему «Страница не найдена ... Ток URL, api/projects, не соответствует ни одному из этих « – dangonfast

+0

@GeoJacob: может быть, хотя django имеет флаг' APPEND_SLASH', это не учитывается «DefaultRouter»? В любом случае это добавляет трейлинг-косую черту! – dangonfast

ответ

3

Не обращайте внимание на сообщение Джанго:

You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8080/api/projects/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings. 

Соответствующая система является DRF's router, которая не зависит от APPEND_SLASH. Вы должны удалить слэш с:

router = DefaultRouter(trailing_slash=False) 

 Смежные вопросы

  • Нет связанных вопросов^_^