【发布时间】:2021-11-28 10:16:04
【问题描述】:
我刚开始学习前端和 javascript。 所以,以前我通过 django rest 框架制作了简单的 api。 现在 - 开始通过 javascript 的 fetch-api 测试它。 GET - 没问题 - 它运作良好。 POST - 我收到一条消息,例如: “415 不支持的媒体类型”。
这是我的简化 html 文件 (tryjs.html),其中包含 fetch POST 请求:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
let myurl2 = "http://127.0.0.1:8000/myfamily/";
async function myfu() {
let response = await fetch(myurl2, {
mode: "no-cors",
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({firstname: "first", secondname: "second"})
})
};
myfu();
</script>
</body>
</html>
看起来很简单,没什么特别的。
这里 - 来自 drf 的 model.py:
from django.db import models
class Family(models.Model):
firstname = models.CharField(max_length=20)
secondname = models.CharField(max_length=20)
def __str__(self):
return self.firstname
还有serializers.py:
from rest_framework import serializers
from .models import Family
class FamilySerializer(serializers.ModelSerializer):
class Meta:
model = Family
fields = ('firstname', 'secondname')
并查看:
from rest_framework import viewsets
from .models import Family
from .serializers import FamilySerializer
class FamilyViewSet(viewsets.ModelViewSet):
queryset = Family.objects.all()
serializer_class = FamilySerializer
以及应用程序的urls.py(添加到项目的urls.py):
from django.urls import path
from rest_framework.routers import SimpleRouter
from .views import FamilyViewSet
from django.views.generic import TemplateView
router = SimpleRouter()
router.register('', FamilyViewSet, basename="family")
urlpatterns = [
path('tryjs/', TemplateView.as_view(template_name="tryjs.html")),
]
urlpatterns += router.urls
我通过邮递员进行 GET 和 POST 请求 - 一切正常。 我通过javascript脚本进行GET请求(我已经从上面的代码中删除了这部分) - 它也可以正常工作。 当我尝试通过上面的 js 脚本发出 POST 请求时,我得到了关于错误媒体类型的失败。 请帮忙。我尝试了很多。它是如此简单的案例。但是...它不起作用(
【问题讨论】:
-
我不了解python,但您似乎正在尝试接受json响应,但响应是由视图引擎生成的html。
标签: javascript django-rest-framework fetch-api