#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
fromarticle
. Я предполагаю, что один из этих 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))
}