Реагировать на запросы внешнего интерфейса Post / Put к проблеме разрешения бэкэнда Django - PullRequest
0 голосов
/ 12 марта 2019

У меня есть полный CRUD на моем бэкэнде Django, и сейчас я пытаюсь установить полный CRUD на моем интерфейсе React.

Успешно создал форму и смог присвоить значения новому сообщению и console.log.Когда я попытался post выполнить бэкэнд, я сначала получил 403 (Not Allowed, но затем я изменил свой REST_FRAMEWORK с 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' на 'rest_framework.permissions.AllowAny' и теперь получаю 405 (Method Not Allowed).

Некоторый код

Бэкэнд

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny'
    ]
}

Фронтенд

handleFormSubmit = (event, requestType, circuitID) => {
        event.preventDefault();
        const name = event.target.elements.name.value;
        const description = event.target.elements.description.value;

        console.log(name, description)

        switch ( requestType ) {
            case 'post':
                return axios.post('http://localhost:8000/api/', {
                    name: name,
                    description: description
                })
                .then(res => console.log(res))
                .catch(error => console.log(error));
            case 'put':
                return axios.put(`http://localhost:8000/api/${circuitID}/`, {
                    name: name,
                    description: description
                })
                .then(res => console.log(res))
                .catch(error => console.log(error));
        }
    }

шаблоны URL в бэкэнде приложения

urlpatterns = [
    path('', circuit_list.as_view()),
    path('create/', circuit_create.as_view()),
    path('<pk>', circuit_detail.as_view()),
    path('<pk>/update/', circuit_update.as_view()),
    path('<pk>/delete/', circuit_delete.as_view()),


    path('workout/create/', workout_create.as_view()),
    path('workout/', workout_list.as_view()),
    path('workout/<pk>', workout_detail.as_view()),
    path('<pk>/update/', workout_update.as_view()),
    path('<pk>/delete/', workout_delete.as_view()),
]

шаблоны URL в Django

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-auth', include('rest_framework.urls', namespace='rest_framework')),
    path('api/', include('circuit.api.urls'))
]

Что я сделал

Я установил CORS, так что это не моя проблема.

Console.log с именем и описанием работает, поэтому он получает новый ввод.Я изменил URL-адреса во внешнем интерфейсе и бэкэнде, но это дает мне более очевидные ошибки при невозможности найти сервер.

Я пытаюсь найти другой способ предоставления разрешений.Я пытался включить @permissions выше выбранных представлений, но все равно выдает мне ту же ошибку.

1 Ответ

0 голосов
/ 13 марта 2019

Это потому, что вы отправляете axios запросов на неправильный URL!

Строка return axios.post('http://localhost:8000/api/', { отправит запрос на Django /api/ URL, который обрабатывается представлением circuit_list. Вы должны отправлять свои запросы с помощью метода post на http://localhost:8000/api/create, а для методов put на http://localhost:8000/api/<pk>/update и ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...