You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中创建Django的Sounds模型对象?

嗨,这个问题太常见啦——前端JavaScript根本没法直接调用Django的ORM操作数据库,毕竟前后端是完全分离的执行环境(哪怕是嵌在Django模板里的JS也不行),必须通过后端API接口来中转操作。下面给你几个实用的落地方案:

方案1:用普通Django视图写基础接口

这是最入门的实现方式,不需要额外依赖:

第一步:后端写处理创建请求的视图

在views.py里新增一个接收POST请求的视图函数:

from django.http import JsonResponse
from .models import Sounds
from django.views.decorators.csrf import csrf_exempt
import json

# 注意:生产环境别直接用csrf_exempt,后面会说安全处理
@csrf_exempt
def create_sound(request):
    if request.method == 'POST':
        try:
            # 解析前端传来的JSON数据
            data = json.loads(request.body)
            consonant = data.get('consonant', '')
            vowel = data.get('vowel', '')
            
            # 调用ORM创建对象
            sound = Sounds.objects.create(consonant=consonant, vowel=vowel)
            
            # 返回创建成功的响应
            return JsonResponse({
                'status': 'success',
                'id': sound.id,
                'consonant': sound.consonant,
                'vowel': sound.vowel
            }, status=201)
        except Exception as e:
            return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
    else:
        return JsonResponse({'status': 'error', 'message': '仅支持POST请求'}, status=405)

第二步:配置路由

在urls.py里给这个视图加个访问路径:

from django.urls import path
from .views import create_sound

urlpatterns = [
    # 你的其他路由...
    path('api/create-sound/', create_sound, name='create_sound'),
]

第三步:前端JS发送请求

用浏览器原生的fetch或者第三方库(比如axios)发送POST请求:

// 构造要提交的数据
const soundData = {
    consonant: 'b',
    vowel: 'a'
};

fetch('/api/create-sound/', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        // 生产环境必须加CSRF防护,从Django模板里获取token:
        // 'X-CSRFToken': document.querySelector('[name=csrfmiddlewaretoken]').value
    },
    body: JSON.stringify(soundData)
})
.then(response => response.json())
.then(data => {
    if (data.status === 'success') {
        console.log('发音条目创建成功:', data);
    } else {
        console.error('创建失败:', data.message);
    }
})
.catch(error => console.error('请求出错:', error));

安全提醒:生产环境一定要去掉@csrf_exempt,在Django模板里渲染CSRF token,然后在JS请求里带上X-CSRFToken头,避免跨站请求伪造攻击。

方案2:用Django REST Framework(DRF)快速构建API(推荐)

如果你的项目需要更多数据库操作(比如查询、更新、删除),DRF能帮你省超多重复代码:

第一步:安装并配置DRF

先安装依赖:

pip install djangorestframework

然后在settings.py的INSTALLED_APPS里添加:

INSTALLED_APPS = [
    # 你的其他应用...
    'rest_framework',
]

第二步:写序列化器

新建serializers.py,用来处理模型和JSON数据的转换:

from rest_framework import serializers
from .models import Sounds

class SoundSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sounds
        fields = ['id', 'consonant', 'vowel']

第三步:写视图(两种方式可选)

方式A:用APIView写单一创建接口

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Sounds
from .serializers import SoundSerializer

class SoundCreateAPIView(APIView):
    def post(self, request):
        serializer = SoundSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()  # 自动调用ORM创建对象
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

方式B:用ModelViewSet一键实现增删改查

如果需要完整的CRUD操作,用这个更高效:

from rest_framework import viewsets
from .models import Sounds
from .serializers import SoundSerializer

class SoundViewSet(viewsets.ModelViewSet):
    queryset = Sounds.objects.all()
    serializer_class = SoundSerializer

第四步:配置路由

如果用的是ModelViewSet,可以用DRF的路由自动生成:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import SoundViewSet

router = DefaultRouter()
router.register(r'api/sounds', SoundViewSet)

urlpatterns = [
    # 你的其他路由...
    path('', include(router.urls)),
]

前端请求方式和方案1类似,只是请求URL变成/api/sounds/,DRF会自动处理数据验证、序列化,还自带可浏览的API文档(直接访问/api/sounds/就能看到)。

核心逻辑总结

不管用哪种方案,本质都是:前端通过HTTP请求把数据传给后端接口,后端接口调用Django ORM完成数据库操作,再把结果返回给前端——这是前后端交互的标准模式,也是唯一能实现你需求的路径。

内容的提问来源于stack exchange,提问作者sy89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:49:26