Во внешнем интерфейсе ПОМЕЩЕН запрос, возвращающий ошибку внутреннего сервера 500 | Django Vue

#django #vue.js #django-rest-framework #django-cors-headers

#django #vue.js #django-rest-framework #django-cors-headers

Вопрос:

Я пытаюсь выполнить PUT запрос в представлении Vue из серверной части DRF API. Хотя POST GET запросы и работают должным образом в Vue (интерфейсе), но для PUT запроса он возвращается INTERNAL SERVER ERROR 500

Вот что я сделал.

settings.py

 INSTALLED_APPS = [
    ...,
    'rest_framework',
    'corsheaders',
    'articles'
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ]
}

CORS_ALLOWED_ORIGINS = [
    "http://localhost:8080"
]
  

views.py

 class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
  

view.vue

 updateArticle(article) {
            axios
                .put('http://127.0.0.1:8000/api/'   article.id,
                    this.article
                )
                .then(response => {
                    this.fetchArticle();
                    this.editArticle = null;
                    return response;
                })
                .catch(error => console.log(error))
        }
  

urls.py

 from .views import ArticleViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'', ArticleViewSet, basename='articles')
urlpatterns = router.urls
  

Комментарии:

1. Обычно, если вы получаете 500, трассировка стека будет опубликована в консоли, на которой запущен ваш сервер django, не могли бы вы опубликовать это? Кроме того, ваш код ArticleViewSet был бы очень полезен.

2. @GlennDJ, он запущен на локальном 127.0.0.1:8000 хосте. ArticleViewSet только что добавлено.

3. Я имел в виду окно консоли, в котором вы запускаете свой серверный код. Однако я только что заметил, что вы вставляете this.article свой js-код, пока вы извлекаете id from article . Я предполагаю, что один из этих 2 неверен?

4. @GlennDJ окно консоли сервера есть localhost:8080 . И это показывает PUT http://127.0.0.1:8000/api/3 500 (Internal Server Error) . полный код статьи. ссылка на vue

Ответ №1:

Вы вызвали этот URL-адрес через PUT , но URL-адрес не заканчивается косой чертой, и Django не может перенаправить на URL-адрес с косой чертой, сохраняя данные PUT.

Просто добавьте '/' в конце URL-адреса

На ваш взгляд.vue

 updateArticle(article) {
            axios
                .put('http://127.0.0.1:8000/api/'   article.id   '/',
                    this.article
                )
                .then(response => {
                    this.fetchArticle();
                    this.editArticle = null;
                    return response;
                })
                .catch(error => console.log(error))
        }