应使用Django REST Framework的类视图APIView实现JSON接口,因其自动处理CSRF、内容协商和状态码;需安装DRF、注册到INSTALLED_APPS、编写继承APIView的视图类、配置URL路由并启动服务。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要为Django项目快速添加一个可被前端调用的JSON接口,比如提交利手测验答案后返回分数和类型判断,而不是跳转页面或渲染模板。
确认Django项目已启用API基础环境
打开终端,进入你的Django项目根目录,执行python manage.py showmigrations。如果看到auth、contenttypes、sessions等核心迁移已应用,说明基础环境就绪;若报错No module named 'django',说明虚拟环境未激活,先运行source .venv/bin/activate(Linux/macOS)或.\.venv\Scripts\activate(Windows)。
这一步必须完成,否则后续所有接口代码都无法运行——【Django REST Framework未安装时,Django原生不提供JSONResponse快捷封装】。
安装并注册Django REST Framework
执行pip install djangorestframework,等待安装完成。
打开settings.py,在INSTALLED_APPS列表顶部插入一行:'rest_framework',。注意末尾逗号不能省,否则Python会报语法错误。
不加这行会导致视图类继承APIView时抛出NameError: name 'APIView' is not defined——这是新手最常卡住的位置。
编写第一个API接口:接收POST数据并返回JSON
方法一:使用函数视图(适合单点快速验证)
在surveys/views.py中添加:
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
@csrf_exempt
def submit_handedness(request):
if request.method == 'POST':
data = json.loads(request.body)
score = sum(int(v) for v in data.get('answers', []))
result = 'right' if score < 30 else 'left' if score > 70 else 'mixed'
return JsonResponse({'score': score, 'handedness': result})
return JsonResponse({'error': 'Only POST allowed'}, status=405)
方法二:使用类视图 + DRF(推荐用于正式接口)
提供使用 django-unfold (v0.56+) 构建高级 Django 管理界面的专业指导。当用户提及 django-unfold、unfold admin 等内容时使用此技能。
在surveys/views.py中添加:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class HandednessSubmitView(APIView):
def post(self, request):
answers = request.data.get('answers')
if not isinstance(answers, list):
return Response({'error': 'answers must be a list'}, status=status.HTTP_400_BAD_REQUEST)
score = sum(int(x) for x in answers)
handedness = 'right' if score < 30 else 'left' if score > 70 else 'mixed'
return Response({'score': score, 'handedness': handedness})
两种写法效果一致,但类视图能自动处理CSRF、内容协商、状态码映射——【函数视图必须手动加@csrf_exempt,否则前端AJAX请求会因CSRF失败而403】。
配置URL路由使接口可访问
第一步:在surveys/urls.py中定义路由(若不存在则新建):
from django.urls import path
from . import views
urlpatterns = [
path('api/submit/', views.HandednessSubmitView.as_view(), name='submit_handedness'),
]
第二步:在项目主urls.py(通常是handedness_platform/urls.py)中包含该子路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('surveys.urls')), # ← 这行必须存在
]
第三步:启动开发服务器:python manage.py runserver,然后用curl测试:
curl -X POST http://127.0.0.1:8000/api/submit/ \
-H "Content-Type: application/json" \
-d '{"answers": [1, 2, 3, 4, 5]}'
如果返回{"score": 15, "handedness": "right"},说明接口已通。

















